我需要 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);
还要提一件事:仪器将报告“参数'类型'的无效枚举”消息,但无论如何它确实有效。此外,模拟器将使用全精度纹理而不是指定的半精度(我认为因为 C 中没有这样的数据类型)。这就是为什么你可能会在模拟器上得到更少的精度问题。
但最令人困惑的是打印glGetString(GL_EXTENSIONS)时支持“GL_OES_texture_float”。但是,如前所述,它不起作用。