gpt4 book ai didi

c++ - 更改 OpenGL 的 z 缓冲区的值

转载 作者:行者123 更新时间:2023-11-30 02:38:59 25 4
gpt4 key购买 nike

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

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

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

最佳答案

使用可编程管道,您可以在片段着色器中写入 gl_FragDepth,有效地设置每个像素的 z 值。使用该功能,您可以通过渲染全屏四边形(或其他东西,如果您只想覆盖整个缓冲区的一个子区域)来轻松实现渲染到深度缓冲区的功能。使用相当现代的 GL,您将能够使用具有足够精度的单 channel 纹理格式,如 GL_R32F。对于较旧的 GL 版本,您可以手动将标准 8 位纹理的 RGB 或 RGBA channel 组合为 24 或 32 位值。

但是,您必须考虑一些小细节。仅当启用 GL_DEPTH_TEST 时才会写入深度缓冲区。这当然可能会丢弃您的一些片段(如果之前未清除深度缓冲区)。解决此问题的一种方法是在深度缓冲渲染期间将 glDepthFunc() 设置为 GL_ALWAYS

您还必须牢记,渲染会写入所有 缓冲区,而不仅仅是深度缓冲区。如果不想修改颜色缓冲区,可以将glDrawBuffer()设置为GL_NONE,也可以使用glColorMask()来防止覆盖它。如果您使用模板缓冲区,当然也应该禁用或屏蔽写入它。

关于c++ - 更改 OpenGL 的 z 缓冲区的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30261280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com