python - 使用视锥体检查边界框相交/碰撞

标签 python collision-detection bounding-box frustum

我想根据某些对象的轴对齐边界框检查视锥体,以粗略检查这些对象是否在视野中。速度不是什么大问题。

最佳答案

我发现构建视锥体的世界空间模型并检查与它的 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/

相关文章:

python - 稀疏 hstack 的 Scipy 错误

python - 从父函数 : "Local variable referenced before assignment" 分配给变量

python - python图像库(PIL)中的getbbox方法不起作用

c++ - Tensorflow DrawBoundingBoxes C++

javascript - 如何从一个笛卡尔坐标获得边界框?

python - Django 模板 : forloop. first 和 forloop.last

python - 使用 Pyramid 获取请求 IP 地址

collision-detection - 3D中直线和AABB之间最近点的快速查询

libgdx - 圆弧的碰撞检测

c++ - (2d Square Collision Detection) 碰撞时移动物体