Opengl es OpenGL ES中GL_无符号_短_4_4_4_4_4和GL_无符号_短_5_6_5之间的差异

Opengl es OpenGL ES中GL_无符号_短_4_4_4_4_4和GL_无符号_短_5_6_5之间的差异,opengl-es,Opengl Es,有人知道OpenGL ES中GL_UNSIGNED_SHORT_4_4_4_4_4_4_4和GL_UNSIGNED_SHORT_5_6_5数据类型之间的区别吗?我不是OpenGL专家,但: GL_UNSIGNED_SHORT_4_4_4_4_4代表GL_UNSIGNED_SHORT_R_G_B_A,其中每个RGBA值可以有一个4位的值(也就是2^4) GL_UNSIGNED_SHORT_5_6_5代表GL_UNSIGNED_SHORT_R_G_B。您可以看到此处没有可用的Alpha值,因此这是一

有人知道OpenGL ES中GL_UNSIGNED_SHORT_4_4_4_4_4_4_4和GL_UNSIGNED_SHORT_5_6_5数据类型之间的区别吗?

我不是OpenGL专家,但:

GL_UNSIGNED_SHORT_4_4_4_4_4代表GL_UNSIGNED_SHORT_R_G_B_A,其中每个RGBA值可以有一个4位的值(也就是2^4)


GL_UNSIGNED_SHORT_5_6_5代表GL_UNSIGNED_SHORT_R_G_B。您可以看到此处没有可用的Alpha值,因此这是一个主要区别。RGB值也可以有更大的值,因为它们分别是5位6和5位。

好的,当使用
GL_UNSIGNED_SHORT_4_4_4_4_4_4_4_4_4
作为像素规范命令(
glTexImage2D
glReadPixels
)中的类型时,假设数据在系统内存中以每像素一个16位的值排列,每个组件占用4个连续位。它只能与
GL\u RGBA
格式一起使用


GL_UNSIGNED_SHORT_5_6_5
也假定单个像素为16位值,但红色和蓝色分量各占5位,绿色分量占6位(没有alpha通道)。它只能与
GL\u RGB

格式一起使用。它们都是16位纹理

当使用32位纹理时,每个颜色组件有8位,加上alpha、最高质量和alpha控制的8位,所以8888

16位总是有一个折衷方案,如果你只需要颜色而不需要alpha,那么就使用565。为什么是565?因为16位不能被3平均分割,而且我们的眼睛在绿色光谱中更擅长SENG,所以将剩余的位赋予绿色,质量会更好。 如果您需要alpha,但图像在alpha中不使用渐变,请使用5551,每种颜色5位,alpha 1位。 如果您的图像有一些渐变alpha,那么您可以使用4444,每种颜色4位,alpha 4位


4444具有最差的颜色质量,但它保留了一些alpha混合,我使用它来处理字体纹理,例如,比32位轻,因为字体是单色的,所以它们适合4位。

好吧,我认为32位纹理是否真的是最高质量。这实际上也是一个公正的妥协。有时我更喜欢浮点纹理(甚至这只是一种折衷)。但是,这只是一个小的概念缺陷,不是一个错误。任何数字都是一种折衷:)在这种情况下,24位颜色是试图接近人眼可以看到的最大不同颜色。是的,但称它为“最高质量和alpha控制”听起来像是非加号ultra,它肯定不是,值得考虑使用GL_ALPHA纹理;它们每像素使用1字节(4444格式为2字节),但精度是4444中可用alpha通道的两倍。由于您的字体是单色的,您只需将颜色设置为OpenGL(glColor*等),因此视觉精度加倍,内存减半。