在深度渲染中使用深度缓冲进行线框渲染

时间:2018-10-31 13:20:06

标签: opengl depth-buffer deferred-rendering culling depth-testing

我有一个小型OpenGL应用程序,用于一些科学的可视化,具有延迟的渲染管线。我有2个通行证:几何通行证,其中我使用位置,法线,反照率,分割等来渲染纹理;和照明过程,我只是将一些数据映射到四边形,然后将其呈现在屏幕上,甚至将一些图像保存在硬盘上。因此,经典的延迟渲染。

现在,我需要将线框渲染添加到其他纹理。 我曾考虑过在几何着色器中进行此操作,但这似乎有点复杂,并且性能也不是问题,所以我只用glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);设置了第三遍,将其渲染到纹理,然后将其传递给灯光和其他东西一起通过。

它可以正常工作,但是我想知道是否有可能以某种方式使用深度缓冲区而不在模型后面渲染线框?我的意思是,我当然可以剔除背面多边形,但在正面多边形后面仍会有些线。我想要的是剔除它,就像填充了多边形一样,但是只渲染线框。

也可以先渲染模型,然后在其上渲染线框,但是我不能这样做,因为我在glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);中将模型渲染到几何图形中的纹理,而在另一个图形中使用了线框通过glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);传递,因此我无法使用默认的深度缓冲区。

那么,你们有什么想法吗?

1 个答案:

答案 0 :(得分:1)

好的,我确实解决了问题。在按照@httpdigest建议的方式实施实体线框渲染之前,我尝试仅保存两次通过的深度缓冲区,如果深度小于线框深度,则通过线框渲染模型。 原来我需要的东西差不多。

enter image description here

但是我几乎可以肯定,使用几何着色器的方法必须更快,内存消耗更少。但是同样,我不是在开发60fps游戏,所以...