在 OpenGL ES 2.0 或 3.0 中生成深度纹理
Generate a depth texture in OpenGL ES 2.0 or 3.0
我在 Android(使用 Java 库)中使用 OpenGL ES 渲染了一个场景。我想对场景应用一些效果,例如景深。我找到了一个不错的散景着色器,它需要一个深度纹理来完成这项工作。然后我需要的是生成一个深度纹理以传递给着色器。我已经在互联网上搜索了一天半试图解决这个问题,但似乎找不到如何从现有场景生成深度纹理的好例子。看来我需要做几遍,可能使用屏幕外渲染到帧缓冲区,然后从中生成深度纹理以传递到我的散景着色器以实际渲染场景。
如何生成深度纹理?一个很好的工作示例将不胜感激。
您可以使用 gl_FragCoord 从片段着色器内部访问每像素深度值。编写一个将深度写出到 gl_FragColor 的片段着色器,如下所示:
gl_FragColor = vec4(gl_FragCoord.z, 0.0, 0.0, 1.0);
使用此片段着色器将您的场景渲染为纹理,您最终会得到一张深度图。
对于任何 post 处理效果,您需要将主场景渲染到 FBO,以便在后续渲染中使用颜色和深度附件数据。
渲染深度纹理非常容易。您只需将深度纹理绑定到您的 FBO 目标,例如
glGenFramebuffers(1, &m_fbo);
glBindFramebuffer(GL_FRAMEBUFFER, m_fbo);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_depth_texture, 0);
PowerVR SDK 的 RenderToTexture 和 ShadowMapping 演示应该包含您需要的所有参考代码:
https://github.com/powervr-graphics/Native_SDK/blob/3.4/Examples/Intermediate/RenderToTexture/OGLES2/OGLES2RenderToTexture.cpp
https://github.com/powervr-graphics/Native_SDK/blob/3.4/Examples/Intermediate/ShadowMapping/OGLES2/OGLES2ShadowMapping.cpp
我在 Android(使用 Java 库)中使用 OpenGL ES 渲染了一个场景。我想对场景应用一些效果,例如景深。我找到了一个不错的散景着色器,它需要一个深度纹理来完成这项工作。然后我需要的是生成一个深度纹理以传递给着色器。我已经在互联网上搜索了一天半试图解决这个问题,但似乎找不到如何从现有场景生成深度纹理的好例子。看来我需要做几遍,可能使用屏幕外渲染到帧缓冲区,然后从中生成深度纹理以传递到我的散景着色器以实际渲染场景。
如何生成深度纹理?一个很好的工作示例将不胜感激。
您可以使用 gl_FragCoord 从片段着色器内部访问每像素深度值。编写一个将深度写出到 gl_FragColor 的片段着色器,如下所示:
gl_FragColor = vec4(gl_FragCoord.z, 0.0, 0.0, 1.0);
使用此片段着色器将您的场景渲染为纹理,您最终会得到一张深度图。
对于任何 post 处理效果,您需要将主场景渲染到 FBO,以便在后续渲染中使用颜色和深度附件数据。
渲染深度纹理非常容易。您只需将深度纹理绑定到您的 FBO 目标,例如
glGenFramebuffers(1, &m_fbo);
glBindFramebuffer(GL_FRAMEBUFFER, m_fbo);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_depth_texture, 0);
PowerVR SDK 的 RenderToTexture 和 ShadowMapping 演示应该包含您需要的所有参考代码:
https://github.com/powervr-graphics/Native_SDK/blob/3.4/Examples/Intermediate/RenderToTexture/OGLES2/OGLES2RenderToTexture.cpp https://github.com/powervr-graphics/Native_SDK/blob/3.4/Examples/Intermediate/ShadowMapping/OGLES2/OGLES2ShadowMapping.cpp