假设我有一个由其位置和方向定义的相机,以及一个由其中心和范围(从长方体中心到面中心的三个正交向量)定义的长方体。面在其外表面面对摄影机时可见,而当其内表面面对它时不可见。
很明显,根据盒子的位置和方向,盒子可能有1-3个可见的面。有没有什么聪明的方法来确定哪些面是可见的?一个显而易见的解决方案是计算每个人脸的人脸法线与人脸相机向量的6个点积。有没有更好的方法?
注意:将使用透视投影,但我认为这无关紧要,“面对相机”的属性似乎独立于投影。
发布于 2011-03-17 22:29:17
我相信你描述的方法是做这件事的正常方法。这是一个非常快的计算,所以你不应该太担心速度。这与他们用于减少光线-三角形相交算法的计算量的方法相同。如果面的前面不可见,则该方法不会继续对该面进行计算。有关此算法的c++实现,请参阅本文。它在计算的前半部分。http://jgt.akpeters.com/papers/MollerTrumbore97/code.html
发布于 2011-03-17 22:39:58
唯一的聪明之处在于,如果立方体的一个面是可见的,那么相对的面肯定是看不见的。至少在常规的透视投影中是这样。
请注意,相反的情况可能不是真的:如果一个面是不可见的,则对面也可能是不可见的。这是因为投影的类型确实很重要。想象一下,立方体离摄像机很近,正对着一张脸。然后稍微旋转立方体,当使用平行投影时,另一个面将立即可见,而在透视投影中不会发生这种情况。
https://stackoverflow.com/questions/5338719
复制相似问题