c++ - OpenGL ES Depth Buffer渲染(iOS模拟器VS真机)

标签 c++ ios opengl-es

使用 iOS 模拟器渲染深度缓冲区时 Getting the true z value from the depth buffer , 一切皆好。 但是在真实设备上的渲染给出了糟糕的结果:深度只用很少的值渲染(没有淡入淡出),就像当你将图像显示为 256 值颜色范围时。

这里是fbo生成的代码:

glGenFramebuffers(1, &sceneFBO);
glGenTextures(2, textures_scene);
glBindTexture(GL_TEXTURE_2D, textures_scene[0]);
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_RGBA, widthResolution, heightResolution, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);

glBindTexture(GL_TEXTURE_2D, textures_scene[1]);
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, widthResolution, heightResolution, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL);

//TODO: GL_DEPTH_COMPONENT cannot be GL_UNSIGNED_BYTE ?

glBindFramebuffer(GL_FRAMEBUFFER, sceneFBO);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textures_scene[0], 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, textures_scene[1], 0);

似乎 GL_DEPTH_ATTACHMENT fbo 的唯一工作值是 GL_UNSIGNED_INT。但是渲染深度还不够……

PS:我不想再次将场景显示到具有 z 值的 GL_COLOR_ATTACHMENT0 中以获得正确的深度(出于性能原因),也不想使用 OpenGL ES3.0 或新金属(iPhone4s支持)。

有什么想法吗?

最佳答案

ES 1 或 2 中不支持深度缓冲区。请参阅此问题的答案:glReadPixels doesn't read depth buffer values on iOS

关于c++ - OpenGL ES Depth Buffer渲染(iOS模拟器VS真机),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29109098/

相关文章:

ios - 在多个对象上渲染多个纹理的问题

c++ - OpenGL相机在相机局部轴上平移和旋转

c++ - 使用 Visual Studio 10 编译 x64 EMMS

ios - IOS 中的 Resource.designer 等价物

iOS 5 推特 API

android - OpenGL ES 深度缓冲 android,无法开始工作

ios - OpenGL ES 可点击对象

c++ - 来自类模板的方法模板的完全特化

c++ - 序列化部分工作 - boost::asio

ios - WKWebView拦截链接点击