我有一个场景要在Android中使用OpenGL ES(使用Java库)进行渲染。 我想将一些效果(例如景深)应用于场景。 我找到了一个不错的bokeh着色器,它需要深度纹理才能完成这项工作。 然后,我需要生成一个深度纹理以传递给着色器。 我花了一天半的时间在互联网上闲逛,试图弄清楚这一点,似乎找不到如何从现有场景生成深度纹理的好例子。 似乎我需要做几遍,可能是使用屏幕外渲染到帧缓冲区,然后从中生成深度纹理,以传递到我的bokeh着色器以实际渲染场景。

如何生成深度纹理? 一个很好的工作示例将不胜感激。

#1楼 票数:2

对于任何后期处理效果,您都需要将主场景渲染到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

#2楼 票数:0

您可以使用gl_FragCoord从片段着色器内部访问每个像素的深度值。 编写一个片段着色器,将深度写入gl_FragColor,如下所示:

gl_FragColor = vec4(gl_FragCoord.z, 0.0, 0.0, 1.0);

使用此片段着色器将场景渲染为纹理,最终将得到深度图。

  ask by Christopher Perry translate from so

未解决问题?本站智能推荐:

1回复

OpenGL ES 2.0/3.0 中带有位图的立方体贴图纹理

当我用简单的颜色创建立方体贴图纹理时,效果很好: 但是当我尝试使用位图创建立方体贴图纹理时: 然后物体变黑。 有人可能会建议为什么带有位图的立方体贴图不起作用(黑色)? 感谢您的任何评论/回答。
1回复

OpenGL ES 2.0/3.0 中有很多对象时的 alpha 混合问题

游戏 3D 场景有很多物体(背景、小行星、火箭): 小行星和火箭的物体使用 alpha 混合: 一般来说,半透明适用于 3D 场景,除了当火箭在小行星后面时它们(火箭)不可见。 似乎此时小行星的透明度不起作用,尽管小行星背后的背景是可见的。 谁能建议为什么火箭在小行星后面不可见? 提前致谢!
1回复

GLSurfaceView与OpenGL ES 3.1上下文

我正在使用OpenGL处理​​Android。 我知道如何使用GLSurfaceView和其定制衍生物类创建的OpenGL ES与方法2.0上下文GLSurfaceView : 和OpenGL ES 3.0上下文: 如何为OpenGL ES 3.1创建上下文?
1回复

Android:针对不同版本 OpenGL ES 的多个 APK

我正在 Unity 中为移动设备制作游戏.. 艺术家真的很想使用线性颜色空间而不是伽马颜色空间.. 线性颜色空间需要 openGL ES 3。问题是21% 的 Android 设备仅支持 openGL 2. 所以我可以制作两个 APK,一个只支持 openGL ES 3 和线性色彩空间,另一个支持
1回复

在 Android 中结合 OpenGL ES 渲染和 UI 元素

Android 应用程序使用 android.opengl.GLSurfaceView 来渲染 OpenGL ES: 如何在 OpenGL ES 渲染上显示 Android UI 元素(如文本标签)?
3回复

OpenGL ES 2.0 和 OpenGL ES 3.0 有什么区别

我想知道OpenGL ES 2.0和OpenGL ES 3.0之间有什么区别。 OpenGL ES 3.0的主要优势是什么?
1回复

IOS:OpenGL ES 2.0与3.0中具有动态分支的着色器的性能

我有一个基于OpenGL ES 3.0的IOS应用程序,我将移植到ES 2.0。 它包含带有一些代价高昂的着色器,我想这是循环和ifs的。 尽管该应用程序可以在支持OpenGL ES 3.0的设备上正常运行,但是我不确定它是否可以在ES 2.0设备(我没有)上运行良好。 因此,我想知道旧的
1回复

glTexStorage2D是否可用于OpenGL ES 3.0中的alpha纹理?

在GL_EXT_texture_storage扩展可用的OpenGL ES 2.0中,我使用glTexStorage2DEXT(GL_TEXTURE_2D, 1, ALPHA8_EXT, width, height)为alpha蒙版纹理指定不可变的存储。 在OpenGL ES 3.0中,glT