我正在尝试理解一些比我现在想象的要容易得多的东西,所以希望有人能够帮助我理解我在下面描述的内容。
我知道如果球体完全位于3D中的六个平截头体平面中的至少一个(左,右,底部,顶部,近远),则球体位于视锥体之外。对于下面示例中具有中心c2的圆,这是完全正确的,该圆完全在左平面之外。重叠测试只需将球体的中心坐标插入平面方程中,即可得到从中心到平面的距离,然后将其与球体半径进行比较。
然而,在具有中心c1的球体上使用这种方法将给我们误报,因为测试将告诉我们球体在右侧和远侧平面内(如果从上方看)。然后,解决方案是通过确定从球体中心到最接近它的视锥体的角落的距离来使用更精确的重叠测试。如果此距离大于半径,则球体位于平截头体之外等。
我不明白的是,如果我们使用第二种方法,查看角落而不是平面,在类似于中心c3的球体上。测试是否会让我们从球体中心减去半径的距离大于0,因此在观察体积之外?
所以如果给出一组正交视图体积的规则,即0≤x≤20,-5≤15,-5≤z≤18,并且x,y,z坐标+球体的半径和告诉他们确定球体是在球体内部还是外部。如何选择使用哪种方法才能真正获得正确的答案?
答案 0 :(得分:1)
实际上你需要两者:
first approach
。red
路段上至少有一个black
交叉路口,则:
3的实现可能很棘手,所以这里有两个链接:
http://www.realtimerendering.com/intersections.html http://www.geometrictools.com/Source/Intersection3D.html
你可以在那里找到Frustrum-Sphere交叉算法。
但geometrictools
实施使用FindMinDistance
算法更复杂。您可以检查它们的实现(Wm5DistPoint3Frustum3.cpp
)并使其仅适用于itersection。