我想检查一些对象的轴对齐的边界框中的视锥,以大致检查这些对象是否在视场中。速度不是什么大事。

最佳答案

我发现建立视锥的世界空间模型并检查与它的bbox碰撞是错误的方法。一种更简单的方法是相反的方式,将给定bbox的每个顶点转换为屏幕空间,如果bbox的任何顶点在屏幕边界内,则将该bbox计为可见。我通过与相机矩阵相乘得到屏幕空间位置,然后根据相机的视野计算透视。
代码如下:

vertexMatrix = matrix([vertex.x,vertex.y,vertex.z,1])
productMatrix = (vertexMatrix * camMatrix)
pVectSS = vector(prodMatrix[0][0],prodMatrix[0][1],prodMatrix[0][2])

pointX = ((pVectSS.x/(-pVectSS.z))/tan(radians(hFOV/2)))/2.0+.5
pointY = ((pVectSS.y/(-pVectSS.z))/tan(radians(vFOV/2)))/2.0+.5

密钥:
 camMatrix = camera inverse world-space matrix
 pVectSS = position vector screen-space
 hFOV = horizontal field of view
 vFOV = vertical field of view

关于python - 使用视锥体检查边界框相交/碰撞,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5348163/

10-10 01:10