我可以用深度/模板缓冲区解决这个 OpenGL 问题吗

问题描述 投票:0回答:1

我试图将点和边缘渲染为黑线和点的网格,类似于搅拌机等建模引擎。我有 3 个独立的绘制例程来绘制点、线和面(每个面是一个或多个具有共享法线的三角形)。当我关闭深度测试时,显然我会渲染每一行。这里我缩小了分辨率,以便我们可以看到像素。

当我打开深度测试时,线条的某些像素的 z 值比它所附着的三角形的边缘更远。因此,线片段被面片段重写。我得到了这种点状的效果。

我正在尝试编写一个绘制例程来渲染仅在相机前面的完整边缘线。我可以使用模板或深度缓冲区吗?我最初考虑使用模板缓冲区来计算边缘片段前面有多少面部片段。如果它为零或一,则绘制线段。但这仍然允许线条片段完全位于面后面,而不仅仅是在角上。这也没有考虑到相机凹入的两个面。

编辑:我了解到这种方法称为隐藏线去除。我目前正在查看是否有一种方法可以仅使用模板和深度缓冲区来做到这一点。

opengl 3d rendering depth-buffer stencil-buffer
1个回答
0
投票

您遇到的问题称为:Z-fighting

可以通过 z 缓冲区分辨率(近平面和远平面之间的距离 - 距离越大分辨率越低)或通过 多边形偏移 来缓解该问题。

阅读 wiki 文章(“缓解”部分)并阅读有关 LearnOpenGl - 深度测试OpenGl Wiki - 深度缓冲区精度 的文章,了解有关该主题的更多信息。

通常,多边形偏移在大多数情况下都可以。

© www.soinside.com 2019 - 2024. All rights reserved.