给定一个任意的 3D 网格,我正在寻找一种可以实时执行隐藏线去除的算法。我在 OpenGL 的上下文中工作,这意味着我们可以利用 Z-Buffer。
我猜算法应该包括以下两个问题的解决方案:
1) 定义哪些是“硬边”,以便稍后使用常规 OpenGL 线绘制它们。这些“硬边”应该对应于 2 个对应面之间的角度高于某个阈值的边。
为简单起见,让我们声明保证每条边定义的面不超过 2 个。
“硬边”的计算应该对每个网格进行一次,即它与视点无关。
2) 根据当前视点定义网格轮廓的轮廓。最终,这部分可以使用经典的 OpenGL 技术(包括多边形偏移或模板缓冲区)来完成,但最好使用常规 OpenGL 线条绘制轮廓,以保持所有线条的统一外观和感觉。
对于那部分,我不确定轮廓的顶点是否都应该通过网格顶点。在任何情况下,对于像立方体这样的网格 _ 不需要轮廓(因为只绘制“硬边”就足够了)_ 算法应该足够聪明,以避免绘制两次“相似线”。 .
最佳答案
这里有几件事情正在发生。首先,您要绘制网格线,其次您要绘制轮廓。这是使这项工作的通用程序,
结果是您现在将绘制网格的所有边缘,以及漂亮的轮廓!
编辑:第二次重读您的帖子后,听起来您不想绘制所有边缘,只绘制那些出现在具有足够高曲率的边界处的边缘。因此,为此,您可以执行以下操作之一:
关于opengl - 3D网格的隐藏线去除算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6480574/