【发布时间】:2011-06-26 16:11:01
【问题描述】:
给定一个任意 3D 网格,我正在寻找一种可以实时执行隐藏线移除的算法。我在 OpenGL 的上下文中工作,这意味着我们可以利用 Z-Buffer。
我猜该算法应该包含以下两个问题的解决方案:
1) 定义哪些是“硬边”,以便以后使用常规 OpenGL 线绘制它们。这些“硬边缘”应该对应于两个对应面之间的角度高于某个阈值的边缘。
为简单起见,我们声明保证每条边定义的面不超过 2 个。
“硬边”的计算应该在每个网格中进行一次,即它与视点无关。
2) 根据当前视点定义网格轮廓的轮廓。最终,这部分可以使用经典的 OpenGL 技术(涉及多边形偏移或模板缓冲区)完成,但最好使用常规 OpenGL 线条绘制轮廓,以保持所有线条的统一外观。
对于那部分,我不确定轮廓的顶点是否都应该通过网格顶点。在任何情况下,对于像立方体这样的网格,不需要轮廓(因为只绘制“硬边”就足够了),算法应该足够聪明,以避免两次绘制“相似线”。 .
【问题讨论】:
-
更新:第一个问题被称为“折痕边缘检测”。第二个问题为“剪影边缘检测”。
-
是的,轮廓本质上是穿过网格顶点。顺便说一句,定义轮廓顶点的过程是计算“阴影体积”的关键阶段。