我应该使用哪种OpenGL ES纹理格式来获得更好的iPad动态范围?

时间:2011-04-18 14:24:00

标签: iphone ios ipad opengl-es opengl-es-2.0

我正在开发一些使用纹理贴图来存储几何体的软件。使用GL_RGB作为内部格式会产生很多混叠,我假设因为默认情况下纹理被压缩到GL_RGB4。

在桌面上我可以使用GL_RGB16或GL_RGB32F(等)来设置内部格式,但在OpenGL ES 2.0下似乎没有任何这些格式。是否可以使用IOS提供的替代或扩展?

2 个答案:

答案 0 :(得分:2)

根据Apple(以及我自己的经验),GL_RGB和GL_UNSIGNED_BYTE使用8:8:8存储。要降低颜色精度,您需要指定GL_UNSIGNED_SHORT_5_6_5的类型或将多个通道打包成一个短的其他类型之一。

如果精确度问题仍然存在,那么查看GL_OES_texture_float and GL_OES_texture_half_float扩展名可能是明智之举。您只能使用GL_NEAREST过滤,但我希望您正在使用它,因为这是一个数据存储练习,您可以上传每个像素16或32位的源通道。

编辑:示例用法直接从项目中翻录(正在上传1个频道/像素的图像,但你明白了):

GLfloat *integralImage;

/* <lots of stuff to allocate storage and fill integralImage here> */

glTexImage2D(
    GL_TEXTURE_2D, 0, GL_LUMINANCE,
    256, 256, 0,
    GL_LUMINANCE, GL_FLOAT, 
    integralImage);

答案 1 :(得分:1)

因此,经过一些研究,你可以获得浮动纹理(如@Tommy所述)。您不能做的是从IOS下的顶点着色器访问它们,这使得它们无法用于存储几何体。