更改OpenGL z缓冲区的值

u59ebvdq  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(216)

我想将一个带有深度值的矩阵传递到openGL的z缓冲区中。Somewhere我发现我可以用途:

glDrawPixels(640,480,GL_DEPTH_COMPONENT,GL_FLOAT,normalizedMappedDepthMat.ptr());

...其中mat是一个opencv Mat。是否可以使用纹理绑定来更改OpenGL中的z缓冲区值?如果可以,如何更改?

fdbelqdn

fdbelqdn1#

通过可编程的流水线,您可以在片段着色器中写入gl_FragDepth,从而有效地设置每像素z值。(如果您只想覆盖整个缓冲区的一个子区域,也可以使用其他方法)。使用相当现代的GL,您将能够使用具有足够精度的单通道纹理格式,如GL_R32F。对于较早的GL版本,您可以手动将标准8位纹理的RGB或RGBA通道组合为24或32位值。
然而,有一些细节你必须考虑。只有当GL_DEPTH_TEST被启用时,才会写入深度缓冲区。当然,这可能会丢弃一些片段(如果深度缓冲区之前没有被清除的话)。解决这个问题的一个方法是在深度缓冲区渲染过程中将glDepthFunc()设置为GL_ALWAYS
你也必须记住,渲染写入到 * 所有 * 缓冲区,而不仅仅是深度缓冲区。如果你不想修改颜色缓冲区,你可以设置glDrawBuffer()GL_NONE,或者可以使用glColorMask()来防止覆盖它。如果你使用模板缓冲区,你也应该禁用或屏蔽写入它,当然。

相关问题