2

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

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

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

球体和视锥体

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

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

4

1 回答 1

2

事实上,你需要两者:

  1. 您必须检查测试球体是否相交/在截锥体(6 个平面)内 - 您的first approach.
  2. 然后(如果 1 为真)并且距离 < -R - 球体完全在里面。
  3. 否则,您必须检查平面上的交叉点坐标(如果您的段上至少有一个red交叉点,则black您有交叉点): 在此处输入图像描述

3 的实现可能很棘手,所以这里有两个链接:

http://www.realtimerendering.com/intersections.html http://www.geometrictools.com/Source/Intersection3D.html

您可以在哪里找到 Frustrum-Sphere 相交算法。

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

于 2016-05-29T22:05:39.793 回答