Frustum和球体交叉

时间:2014-08-29 16:25:28

标签: c++ intersection culling frustum

我在这里阅读这篇简洁的文章:Frustum Culling

并且它读取以找到球体和平截头体侧面(平面)之间的距离是:

  

C =球体中心

     

N =平面法线

     

D =平面距离原点的距离

     

距离= DotProduct(C,N)+ D

但我不明白变量D所指的是什么。特别是,我不明白截头锥体的起源是什么。它是相机眼睛的位置吗?

1 个答案:

答案 0 :(得分:4)

D是您需要沿着平面法线行进的垂直距离,以穿过定义平面的任何空间的原点(我希望这通常是世界坐标中的原点,但如果您的飞机在摄像机坐标中描述然后使用摄像机原点。最终只要你在同一个空间进行计算就无关紧要了。换句话说,无论你用于球体和飞机的空间的哪个原点正在进行比较。)。

这是平面方程中的相同值:Ax + By + Cz + d = 0.d是您将使用的值D.您可以通过在平面上获取已知点并使用它来求解d的平面方程来计算d。 (A,B,C)是平面单位法向量的X,Y,Z元素,(x,y,z)是平面上点的坐标,求解d的平面方程,你有你的距离。

请注意在同一空间中进行所有计算,即世界空间或相机空间或屏幕空间。我怀疑你会想要在世界空间中进行计算。

相关问题