使用定制深度测试的深度战斗解决方案

a64a0gku  于 2022-09-26  发布在  其他
关注(0)|答案(1)|浏览(123)

我的问题的核心是,我在纯OpenGL的深度战斗中遇到了麻烦。我有两个相同的几何图形,但其中一个比另一个简单。这形成了一组完全共面的多边形,我想在更简单的几何体之上显示复杂的几何体。

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

我的想法是在绘制第二组三角形时临时使用自定义深度测试。我想保存第一组渲染过程中碎片的深度。接下来,我将使用glDepthFunc(GL_ALWAYS)禁用深度缓冲区(但仍在写入)。在呈现第二个集合时,我会丢弃具有比我刚刚创建的内存更大的z的片段,但是有一定的容限(我想至少是Z-Buffer在特定z处的精度的一倍)。然后我会将深度函数重置为GL_LEQUAL

实际上,我只是想强行为深度测试留出一定的余量。

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

谢谢

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

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

我的Windows变黑了。对不起,如果事情很明显,我还不熟悉OpenGL

hgqdbh6s

hgqdbh6s1#

正如Rabbit76所说,我只需使用glDepthMask(GL_FALSE)禁用深度写入即可。现在,我可以使用相同的偏移量绘制多个共面多边形层。解决了。

相关问题