使用 glCopyTexSubImage2D 将深度缓冲区渲染到纹理
render depth buffer to texture using glCopyTexSubImage2D
我想将深度缓冲区渲染为纹理,并使用 DepthTexture 绘制一个四边形。但它不起作用。
首先,我制作深度纹理:
glGenTextures(1, &_iTexDepth);
glBindTexture(GL_TEXTURE_2D, _iTexDepth);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, _w, _h, 0,
GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0);
glBindTexture(GL_TEXTURE_2D, 0);
并准备渲染:
glViewport(0, 0, _w, _h);
glMatrixMode(GL_PROJECTION);
glLoadMatrixf(camera_proj);
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(camera_modelview);
glPushAttrib(GL_COLOR_BUFFER_BIT | GL_PIXEL_MODE_BIT);
glDrawBuffer(GL_BACK);
glReadBuffer(GL_BACK);
glClearColor(0, 0, 0, 1);
glClearDepth(1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
并渲染一些东西,并复制到纹理:
glBindTexture(GL_TEXTURE_2D, _iTexDepth);
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, _w, _h);
glBindTexture(GL_TEXTURE_2D, 0);
最后,我绑定_iTexDepth
并绘制一个四边形
此代码适用于GL_RGBA8
纹理,但不适用于GL_DEPTH_COMPONENT
(白色仅适用于DEPTH_COMPONENT
)
如果您对此问题有一些想法,我需要一些帮助
附言我不想使用 FBO
如果您的纹理变成全白,则它确实被正确渲染。
我认为,问题是由于投影矩阵中远平面和近平面的设置。深度缓冲区不是线性的,如果你的近平面非常接近,如 0.1,远平面远如 500.0,那么很多可能的深度值都非常接近你的近平面。
最好将近平面设置为 2.0 甚至更高。尝试不同的近/远平面值,如果您仍然遇到问题,请告诉我。
至于你的英语,没关系!作为日本人民的前私人英语老师,您的标准非常好。
相关文章:
- C++字符*缓冲区的大小
- OpenInventor从9.8升级到10.4.2后,GLSL纹理返回零
- 如何绘制到目标纹理大于屏幕分辨率的帧缓冲区
- 在glsl中使用实例化时,为什么纹理缓冲区比顶点输入快
- opengl-黑色纹理,如何在缓冲区上使用glm::vec*
- 将纹理坐标呈现到帧缓冲区
- 使用帧缓冲区将深度缓冲区渲染到纹理中
- 是否可以在opengl中使用深度缓冲区渲染3D纹理
- GLSL:用缓冲区或纹理替换大型统一int数组
- OpenGL纹理缓冲区-GLSL语法
- 通过帧缓冲区对象渲染到纹理
- 向具有帧缓冲区的纹理发出绘图(纹理为空白)
- 使用 glCopyTexSubImage2D 将深度缓冲区渲染到纹理
- OpenGL如何使用多采样2d纹理将深度缓冲区附加到帧缓冲区
- 我正在渲染纹理,但渲染缓冲区是黑色的
- 深度缓冲区作为纹理 - "D3D11 ERROR: The Format is invalid when creating a View"
- 纹理和渲染缓冲区在framebuffer对象上共享相同的空间吗?
- 通过原始缓冲区数据缩放和旋转纹理到另一个纹理上
- OpenGL 将纹理绑定到顶点缓冲区对象(使用 CG 着色器)
- 我如何将图像的部分从缓冲区复制到纹理中以渲染