有人知道OpenGL ES中GL_UNSIGNED_SHORT_4_4_4_4和GL_UNSIGNED_SHORT_5_6_5数据类型之间的区别吗?
答案 0 :(得分:6)
它们都是16位纹理。
当使用32位纹理时,每个颜色分量有8位加上8位,用于alpha,最高质量和alpha控制,所以8888。
如果您只需要颜色而不是alpha,那么16位总是有折衷,那就使用565.为什么选择565?因为16位不能均匀地划分为3,并且我们的眼睛在绿色光谱中的表现更好,所以通过将剩余的位置为绿色来获得更好的质量。 如果你需要阿尔法,但你的图像不使用alpha使用渐变5551,5每个颜色5位用于alpha。 如果你的图像有一些渐变alpha,那么你可以使用4444,每种颜色4位,alpha为4位。
4444具有最差的色彩质量,但它保留了一些alpha混合,我使用它作为我的字体纹理,例如,比32位轻,因为字体是单色的,它们很适合4位。答案 1 :(得分:4)
我不是OpenGL专家,但是:
GL_UNSIGNED_SHORT_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位。
答案 2 :(得分:0)
好吧,当在像素规范命令(GL_UNSIGNED_SHORT_4_4_4_4
或glTexImage2D
)中使用glReadPixels
作为类型时,假设数据在系统内存中布局为一个16位值像素,每个组件各占4个连续位。它只能以GL_RGBA
。
而GL_UNSIGNED_SHORT_5_6_5
也假设单个像素为16位值,但红色和蓝色分量各占5位,绿色分量占6位(没有alpha通道)。它只能以GL_RGB
。