【问题标题】:Box backface culling盒子背面剔除
【发布时间】:2011-03-17 22:39:57
【问题描述】:

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

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

注意:将使用透视投影,但我认为这并不重要,“面对相机”的属性似乎与投影无关。

【问题讨论】:

    标签: algorithm geometry 3d


    【解决方案1】:

    我相信您描述的方法是执行此操作的正常方法。这是一个非常快的计算,所以你不应该太担心速度。这与他们用来减少射线-三角形相交算法的计算次数的方法相同。如果脸部的前部不可见,则该方法不会继续对该脸部进行计算。有关此算法的 c++ 实现,请参阅本文。这是在计算的前半部分。 http://jgt.akpeters.com/papers/MollerTrumbore97/code.html

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 谢谢,我现在可以看到我在投影方面错了。使用平行投影,剔除会更容易一些,点积可以与投影方向相反,不需要计算每个面的偏移量。
      • @Suma 如果您的相机始终位于 (0,0,0) 并面向与一个轴对齐(通常它朝向 Z 轴的正端),许多计算会变得更容易。例如,相机人脸向量就是人脸点的坐标。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多