用于夹紧模型以观察平截头体的3D算法

时间:2015-01-08 10:30:15

标签: algorithm 3d webgl

对于约束对象以使其始终至少部分地与视锥体相交的有效方法是什么?

用例是,在查看模型时,我想要锁定摄像机平移以及模型转换,以便视锥体永远不会看空空间。

我尝试过的一种方法是将模型对象包装在边界卷中,然后在那些超出平截头体时强制执行约束。到目前为止,我已尝试过边框,但我正在考虑使用最小的凸包。

问题是当你放大得足够近时,它仍然可以看到边界内的空白区域,如附图所示。

这适用于WebGL应用程序,因此需要在JavaScript中相当高效,并且还需要数千个顶点。

enter image description here

2 个答案:

答案 0 :(得分:3)

理想情况下,你会有一个网格的aabb树,然后你可以在camea / screen上递归投影,直到得到一个交叉点?

http://www.codersnotes.com/algorithms/projected-area-of-an-aabb

编辑:无论如何,它只是愚弄算法反对aabtree,所以寻找优化的解决方案,正在寻找优化的截头剔除事物

https://fgiesen.wordpress.com/2010/10/17/view-frustum-culling/ http://www2.in.tu-clausthal.de/~zach/teaching/cg_literatur/vfc_bbox.pdf

答案 1 :(得分:1)

由于一般近似是可能的,我会尝试点云。首先创建一个点列表 - 每个第N个网格顶点或每个第N个面中心。以N为例10.一旦有了这个点数组,你所做的就是在更新方向时检查是否有任何点在平截头体内。如果没有,那么这意味着用户移动或旋转相机太多,您需要恢复最后可接受的方向。

我知道这看起来很荒谬,但我认为它很容易实现,并且顶点的截锥检查只是每个平面的几次乘法。但它并不完美。

您还可以将视锥体缩小一点,以确保物体周围有一些边框。