通常纹素是RGBA值。纹素在以下代码中表示的数据是什么:
const int TEXELS_W = 2, TEXELS_H = 2;
GLubyte texels[] = {
100, 200, 0, 0,
200, 250, 0, 0
};
glBindTexture(GL_TEXTURE_2D, textureId);
glTexImage2D(
GL_TEXTURE_2D,
0, // mipmap reduction level
GL_LUMINANCE,
TEXELS_W,
TEXELS_H,
0, // border (must be 0)
GL_LUMINANCE,
GL_UNSIGNED_BYTE,
texels);
答案 0 :(得分:4)
GLubyte texels[] = {
100, 200, 0, 0,
200, 250, 0, 0
};
OpenGL只会读取其中的4个值。由于GL_UNPACK_ALIGNMENT
默认为4,因此OpenGL需要each row of pixel data to be aligned to 4 bytes。因此,每行中的两个0只是填充,因为编写此代码的人并不知道如何更改对齐。
因此OpenGL将读取100, 200
作为第一行,然后跳到下一个4字节边界并读取200, 250
作为第二行。
答案 1 :(得分:1)
每个元素都是单个亮度值。 GL将其转换为浮点,然后通过将亮度值复制三次(红色,绿色和蓝色)并将1附加为alpha 将其组合为RGBA元素。然后将每个分量乘以带符号的比例因子
GL_c_SCALE
,添加到有符号偏差GL_c_BIAS
,并限制在[0,1]范围内(见glPixelTransfer
)。