在延迟渲染中使用深度缓冲区进行线框渲染
Wireframe rendering with depth-buffer in deferred rendering
我有一个小型 OpenGL 应用程序,用于使用延迟渲染管道进行一些科学可视化。我有 2 个通道:几何通道,我在其中渲染具有位置、法线、反照率、分段的纹理,e.t.c。和照明通道,我只是将其中一些数据映射到四边形并将其渲染在屏幕上,甚至将一些图像保存在硬盘上。所以,经典的延迟渲染。
现在我需要为附加纹理添加线框渲染。
我考虑过在几何着色器中做这件事,但它看起来有点复杂而且性能不是问题,所以我只设置了第三遍 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
,我将它渲染到纹理,然后将它传递给灯光与其他东西一起传递。
它工作正常,但我想知道是否可以以某种方式使用深度缓冲区而不在模型后面渲染线框?我的意思是,当然我可以剔除背面多边形,但正面多边形后面仍然会有一些线,这些线也是正面的。我想要的是像填充多边形一样剔除它,但只渲染线框。
渲染模型然后在其上渲染线框也可以,但我不能这样做,因为我在几何通道中使用 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
和线框将模型渲染到纹理在 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
的另一遍中,所以我有点不能使用默认的深度缓冲区。
那么,你们有什么想法吗?
好的,我确实解决了问题。在按照 @httpdigest
的建议实施实体线框渲染之前,我尝试只保存两次通道的深度缓冲区,如果深度小于线框的深度,则通过线框渲染模型。
结果正是我所需要的。
但我几乎可以肯定几何着色器的方法必须更快并且占用更少的内存。但同样,我不是在开发 60fps 游戏,所以...
我有一个小型 OpenGL 应用程序,用于使用延迟渲染管道进行一些科学可视化。我有 2 个通道:几何通道,我在其中渲染具有位置、法线、反照率、分段的纹理,e.t.c。和照明通道,我只是将其中一些数据映射到四边形并将其渲染在屏幕上,甚至将一些图像保存在硬盘上。所以,经典的延迟渲染。
现在我需要为附加纹理添加线框渲染。
我考虑过在几何着色器中做这件事,但它看起来有点复杂而且性能不是问题,所以我只设置了第三遍 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
,我将它渲染到纹理,然后将它传递给灯光与其他东西一起传递。
它工作正常,但我想知道是否可以以某种方式使用深度缓冲区而不在模型后面渲染线框?我的意思是,当然我可以剔除背面多边形,但正面多边形后面仍然会有一些线,这些线也是正面的。我想要的是像填充多边形一样剔除它,但只渲染线框。
渲染模型然后在其上渲染线框也可以,但我不能这样做,因为我在几何通道中使用 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
和线框将模型渲染到纹理在 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
的另一遍中,所以我有点不能使用默认的深度缓冲区。
那么,你们有什么想法吗?
好的,我确实解决了问题。在按照 @httpdigest
的建议实施实体线框渲染之前,我尝试只保存两次通道的深度缓冲区,如果深度小于线框的深度,则通过线框渲染模型。
结果正是我所需要的。
但我几乎可以肯定几何着色器的方法必须更快并且占用更少的内存。但同样,我不是在开发 60fps 游戏,所以...