我想根据某些对象的轴对齐边界框检查视锥体,以粗略检查这些对象是否在视野中。速度不是什么大问题。
最佳答案
我发现构建视锥体的世界空间模型并检查与它的 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/