Graphics 球体/平截头体重叠测试的选择

Graphics 球体/平截头体重叠测试的选择,graphics,3d,frustum,culling,Graphics,3d,Frustum,Culling,我试图理解一些可能比我现在想的要容易得多的东西,所以希望有人能帮助我理解我下面描述的内容 我知道,如果球体完全位于三维中六个平截头体平面(左、右、下、上、近、远)中的至少一个平面的后面,则球体位于视锥体之外。下面示例中的圆心为c2的圆也是如此,它完全位于左平面之外。重叠测试只需将球体的中心坐标插入平面方程,以获得从中心到平面的距离,然后将其与球体的半径进行比较即可 然而,在中心为c1的球体上使用这种方法会给我们一个假阳性,因为测试会告诉我们球体在右侧和远平面内(如果从上面看)。然后,解决方案是通

我试图理解一些可能比我现在想的要容易得多的东西,所以希望有人能帮助我理解我下面描述的内容

我知道,如果球体完全位于三维中六个平截头体平面(左、右、下、上、近、远)中的至少一个平面的后面,则球体位于视锥体之外。下面示例中的圆心为c2的圆也是如此,它完全位于左平面之外。重叠测试只需将球体的中心坐标插入平面方程,以获得从中心到平面的距离,然后将其与球体的半径进行比较即可

然而,在中心为c1的球体上使用这种方法会给我们一个假阳性,因为测试会告诉我们球体在右侧和远平面内(如果从上面看)。然后,解决方案是通过确定球体中心到离球体最近的视锥台角的距离,使用更精确的重叠测试。如果此距离大于半径,则球体位于平截头体外部等

我不明白的是,如果我们使用第二种方法,在一个像中心c3的球体上,看角而不是平面,会怎么样。这个测试不会告诉我们,从球体中心减去半径的距离大于0,因此超出了观察体积吗

因此,如果给定一组正交视图体积的规则,即0≤ x≤ 20, -5 ≤ 15, -5 ≤ Z≤ 18和x、y、z坐标+球体半径,并被告知确定球体是在其内部还是外部。如何选择使用何种方法才能真正获得正确答案?

事实上,您需要两种方法:

  • 您必须检查测试球体是否与平截头体(6个平面)相交/在平截头体(6个平面)内-您的
    第一种方法
  • 然后(如果1为真),距离<-R-球体完全在内部
  • 否则,您必须检查平面上的交点坐标(如果在您获得交点的
    黑色
    段上至少有一个
    红色
    十字):
    
  • 3的实现可能很棘手,因此这里有两个链接:

    在这里可以找到平锥球体相交算法


    但是
    geometrictools
    实现使用了
    findministance
    算法,这更为复杂。您可以检查它们的实现(
    Wm5DistPoint3Frustum3.cpp
    )并将其调整为仅适用于itersection。

    现在我明白了,这是有道理的。谢谢