箱背面剔除

时间:2011-03-17 12:01:26

标签: algorithm geometry 3d

假设我有一个由其位置和方向定义的摄像机,以及一个由其中心和范围定义的框(从框中心到面中心的三个正交矢量)。当外表面朝向相机时,可以看到面部,当其内表面朝向相机时,面部不可见。

很明显,根据盒子的位置和方向,可能会看到盒子的1-3个面。是否有一些聪明的方法来确定哪些面可见?一个明显的解决方案是针对每个面部计算面部法线的6个点积与面部相机矢量。还有更好的方法吗?

注意:将使用透视投影,但我认为不重要,“面对相机”的属性似乎独立于投影。

2 个答案:

答案 0 :(得分:2)

我相信你描述的方法是正常的方法。这是一个非常快速的计算,所以你不应该太担心速度。这与他们用于减少光线三角交叉算法的计算次数的方法相同。如果无法看到面部的正面,则该方法不会继续计算该面部。有关此算法的c ++实现,请参阅此文章。这是在计算的前半部分。 http://jgt.akpeters.com/papers/MollerTrumbore97/code.html

答案 1 :(得分:2)

唯一的聪明之处在于,如果立方体的一面是可见的,那么对立面绝对不是。至少在常规透视投影中。

请注意,相反的情况可能并非如此:如果一张脸是不可见的,那么对立面也可能是不可见的。这是因为投影的类型很重要。想象一下,立方体非常靠近相机,它直视着一张脸。然后稍微旋转立方体,而使用平行投影时,另一个面会立即变得可见,在透视投影中,这不会发生。