Graphics 球体/平截头体重叠测试的选择
我试图理解一些可能比我现在想的要容易得多的东西,所以希望有人能帮助我理解我下面描述的内容 我知道,如果球体完全位于三维中六个平截头体平面(左、右、下、上、近、远)中的至少一个平面的后面,则球体位于视锥体之外。下面示例中的圆心为c2的圆也是如此,它完全位于左平面之外。重叠测试只需将球体的中心坐标插入平面方程,以获得从中心到平面的距离,然后将其与球体的半径进行比较即可 然而,在中心为c1的球体上使用这种方法会给我们一个假阳性,因为测试会告诉我们球体在右侧和远平面内(如果从上面看)。然后,解决方案是通过确定球体中心到离球体最近的视锥台角的距离,使用更精确的重叠测试。如果此距离大于半径,则球体位于平截头体外部等 我不明白的是,如果我们使用第二种方法,在一个像中心c3的球体上,看角而不是平面,会怎么样。这个测试不会告诉我们,从球体中心减去半径的距离大于0,因此超出了观察体积吗 因此,如果给定一组正交视图体积的规则,即0≤ x≤ 20, -5 ≤ 15, -5 ≤ Z≤ 18和x、y、z坐标+球体半径,并被告知确定球体是在其内部还是外部。如何选择使用何种方法才能真正获得正确答案?事实上,您需要两种方法:Graphics 球体/平截头体重叠测试的选择,graphics,3d,frustum,culling,Graphics,3d,Frustum,Culling,我试图理解一些可能比我现在想的要容易得多的东西,所以希望有人能帮助我理解我下面描述的内容 我知道,如果球体完全位于三维中六个平截头体平面(左、右、下、上、近、远)中的至少一个平面的后面,则球体位于视锥体之外。下面示例中的圆心为c2的圆也是如此,它完全位于左平面之外。重叠测试只需将球体的中心坐标插入平面方程,以获得从中心到平面的距离,然后将其与球体的半径进行比较即可 然而,在中心为c1的球体上使用这种方法会给我们一个假阳性,因为测试会告诉我们球体在右侧和远平面内(如果从上面看)。然后,解决方案是通
第一种方法
黑色段上至少有一个红色十字):
但是
geometrictools
实现使用了findministance
算法,这更为复杂。您可以检查它们的实现(Wm5DistPoint3Frustum3.cpp
)并将其调整为仅适用于itersection。现在我明白了,这是有道理的。谢谢