相关疑难解决方法(0)

渲染到iOS下的浮点纹理

iPad现在支持OES_texture_half_float 扩展.不幸的是,我无法将浮点纹理绑定到帧缓冲对象.这是我的尝试:

GLuint textureHandle;
glGenTextures(1, &textureHandle);
glBindTexture(GL_TEXTURE_2D, textureHandle);
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 256, 256, 0, GL_LUMINANCE, GL_HALF_FLOAT_OES, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
assert(GL_NO_ERROR == glGetError()); // this passes

GLuint fboHandle;
glGenFramebuffers(1, &fboHandle);
glBindFramebuffer(GL_FRAMEBUFFER, fboHandle);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureHandle, 0);
assert(GL_FRAMEBUFFER_COMPLETE == glCheckFramebufferStatus(GL_FRAMEBUFFER)); // this asserts
Run Code Online (Sandbox Code Playgroud)

更换时,该工作正常GL_HALF_FLOAT_OES使用GL_UNSIGNED_BYTE.

这是iOS的限制还是我做错了什么?

iphone opengl-es

7
推荐指数
1
解决办法
4931
查看次数

在iOS上的OpenGL ES 2.0中浮点纹理而不将它们钳制到[0,1]

我需要gl_FragColor来"绘制"浮点值,它也可以是负值(x <0)和> 1.0.然后,我想使用FBO的颜色附件,这个值在渲染时使用,并将其用作另一个FBO中的纹理.现在我已经阅读http://www.khronos.org/opengles/sdk/docs/man/(GlTexImage2D下),所有值都被限制在[0,1]的范围内,而且我没有找到glClampColor指令.有没有可能在这里找到一个解决方法,或者有人有一个想法可以帮助我解决我的问题?:)

解决了

当使用浮点纹理时,可能并且值根本不会被钳制到[0,1],但它只能使用GL_HALF_FLOAT_OES作为纹理的内部格式.使用GL_FLOAT会导致一个不完整的帧缓冲对象,这真的很难过,因为我正在构建一个求和区域表(SAT)并且在这里遇到了很大的精度问题.所以一般来说,iPad2上只支持半精度(2个字节,1个符号位+ 5个指数位+ 10个分数)浮点数.

工作创建FBO的颜色附件纹理

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_HALF_FLOAT_OES, NULL);
Run Code Online (Sandbox Code Playgroud)

还有一件事要提到:仪器将报告"无效枚举参数'类型'"消息,但无论如何它确实有效.此外,模拟器将使用全精度纹理而不是指定的半精度(我认为因为C中没有这样的数据类型).这就是为什么你可以在模拟器上获得较少的精度问题.

但最令人困惑的是打印glGetString(GL_EXTENSIONS)时支持"GL_OES_texture_float".但是如前所述,它不起作用.

opengl-es glsl ios opengl-es-2.0 ios6

7
推荐指数
1
解决办法
5375
查看次数

标签 统计

opengl-es ×2

glsl ×1

ios ×1

ios6 ×1

iphone ×1

opengl-es-2.0 ×1