我正在开发一些使用纹理贴图来存储几何体的软件。使用GL_RGB作为内部格式会产生很多混叠,我假设因为默认情况下纹理被压缩到GL_RGB4。
在桌面上我可以使用GL_RGB16或GL_RGB32F(等)来设置内部格式,但在OpenGL ES 2.0下似乎没有任何这些格式。是否可以使用IOS提供的替代或扩展?
答案 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下的顶点着色器访问它们,这使得它们无法用于存储几何体。