假设我们有一个由XYZ-formatted顶点(如点云模型)组成的三维模型。我的问题是给出相机或相机投影的位置和正常值(例如,我在看那些点--通常是由我的API给出的),我如何提取可见点并移除不可见点?
例如,在这里,对应于黑点云框和红色框的后表面的点被移除。在点云中,点有一个大小。因此,让我们假设他们有一个大小,比如说5像素半径只是为了建模的目的。
不一定是完美的。只要任何方法,以某种方式删除不可见的点,所以减少总点,但对可见点没有太大的影响,将工作。
下面是要使用的测试点云模型:https://www.dropbox.com/s/dfhyy9xa5i9o2fz/testPLY.ply?dl=0

发布于 2017-06-27 02:46:40
画一个看不见的网格,它将遮住我们不想要的点。
这种方法应该给出预期的结果,但它的问题是第一部分,这一点一点也不简单。
用脂肪颗粒近似于网格,这些粒子足够大,足以隐藏背景中的点。
这个方法应该比A简单得多,因为不再需要三角剖分。但是,结果并不完美:一些应该是可见的点可能消失,而一些不应该可见的点将保持可见。调整颗粒直径和偏置会产生不同的结果。
作为一个非常便宜的技巧,只需渲染点云的雾功能。离摄像机越远的地方,它们就越不明显。此方法不会隐藏任何点,但仍有助于读取卷。
发布于 2017-07-04 14:42:26
从概念上来说,最简单的方法是把它看作一个光线投射问题,把每个点表示为一个小球体。它应该像常规射线追踪器中的阴影射线一样工作:遍历你所有的点,并且对每一个点,跟踪一条光线到相机。如果光线与代表另一个点的球体相交,则将其移除。
如果点的数目足够小,你可以直接这样做,但是如果速度不够快,你应该把这些点放到一个加速结构中,比如kd-树。(如果需要这种优化,最好从现有的射线跟踪器(如PBRT )开始,而不是从头开始编写。)
如果点表示表面探测(从像激光扫描仪),你也可能有表面正常在每个点,取决于扫描仪技术。在这种情况下,您可能会得到更好的结果使用小光盘,而不是球。从一个角度看,这会使你的脸更加健壮。
最后,如果您还需要移除相机视图之外的点(例如摄像机后面),您可以同时通过比较每条光线的方向和摄像机的视图界限来做到这一点。
https://computergraphics.stackexchange.com/questions/5274
复制相似问题