1

我想为我的引擎做平截头体剔除:)

这个网站上似乎是如何做到这一点的好例子,但有一件事我没有得到:

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

是为什么有一个半径?或者,点积与平面距离之间的依赖关系是什么?

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

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

没错。我的 P 不是坐标系中的 P 描述点,而是 P - 平面的已知点。所以它是点和平面已知点之间的向量。一切似乎都是合法的。感谢您的帮助:P 这里很好地解释了:www.songho.ca/math/plane/plane.html

4

1 回答 1

0

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

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

于 2013-05-17T16:23:50.740 回答