使用自定义深度测试的深度解决方案

时间:2019-06-18 10:23:23

标签: c++ opengl glsl zbuffer depth-testing

我的问题的核心是我在纯OpenGL中无法进行深度战斗。 我有两个相同的几何,但是一个比另一个简单。 这形成了一组完美的共面多边形,我想在较简单的几何图形上显示复杂的几何图形。

不出所料,当我使用OpenGL深度缓冲区顺序绘制两组三角形时,它使我进入了深度战斗。目前,我已经使用glPolygonOffset对其进行了修补,但是该解决方案不适合我(我希望多边形完全共面)。

我的想法是在绘制第二组三角形时临时使用自定义深度测试。我想在渲染第一组图像时保存片段的深度。接下来,我将使用glDepthFunc(GL_ALWAYS)禁用深度缓冲区(但仍在其中写入)。渲染第二组图像时,我将丢弃z大于我刚刚创建的内存但具有一定余量的片段(我猜至少是Z缓冲区在特定z处的精度的一倍)。然后,我将深度功能重置为GL_LEQUAL

实际上,我只是想对深度测试强加一定的余地。

这是可能的方法吗? 问题是我不知道如何将信息(自定义深度缓冲区)从一个程序传递到另一个程序。

谢谢

PS:我也研究了帧缓冲区对象和延迟渲染,因为显然它允许通过“ G缓冲区”传递信息,但是一旦我写了:

unsigned int gBuffer;
glGenFramebuffers(1, &gBuffer);
glBindFramebuffer(GL_FRAMEBUFFER, gBuffer);

我的窗口变黑...很抱歉,如果事情显而易见,我对OpenGL还不熟悉

1 个答案:

答案 0 :(得分:0)

正如Rabbid76所说,我可以简单地使用glDepthMask(GL_FALSE)禁用深度写入。 现在,我可以使用相同的偏移量绘制几层共面多边形。 解决了。​​