如何确定球体是否位于平面前方

时间:2013-05-17 15:30:16

标签: math geometry directx

我想对我的引擎进行截头剔除:)

On this site似乎是一个很好的例子,但是有一件事我没有得到:

if ( D3DXPlaneDotCoord( &m_frustum[i], pPosition ) + radius < 0 )
        {
            // Outside the frustum, reject it!
            return FALSE;
        }

为什么有半径? 或者也许点积和距离平面的距离是什么?

因为我的实际知识,我会这样计算: 计算平面的点积。并且随着向量归一化,点积等于向量之间的角度余弦。所以它可以返回介于-1和1之间的值。(这就是为什么我不明白为什么添加半径)。如果cos&gt; 0表示角度介于0到90度之间。所以中心点在飞机前面。然后我会使用方程来计算平面点的距离。并检查该距离是否高于球体半径。但是这个家伙在这个等式中有这个。那是什么魔法?

好的,我看到我的错误点procuct在哪里不等于角度的cos,而是角度的cos和矢量P的长度(描述球体中心的位置)。那究竟是什么cos*|P| = ? http://tinypic.com/r/2vxrpkw/5(图片没有代表) 可能回答了自己的问题brb(维基百科):)

是的。我的P不是坐标系中的P desribing点,但它是P - 已知的平面点。所以它是点与平面知识点之间的向量。一切似乎都是合法的。感谢您的帮助:P这里有很好的解释:www.songho.ca/math/plane/plane.html

1 个答案:

答案 0 :(得分:0)

这可以看作是pPosition沿平面法线的投影。

如果此投影的长度加上平面的D分量减去球体半径小于零,则表示球体落后。