调用glTexImage2D时GL_LUMINANCE的Texel数据

时间:2017-11-15 16:25:59

标签: opengl texel

通常纹素是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);

2 个答案:

答案 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_LUMINANCE

     

每个元素都是单个亮度值。 GL将其转换为浮点,然后通过将亮度值复制三次(红色,绿色和蓝色)并将1附加为alpha 将其组合为RGBA元素。然后将每个分量乘以带符号的比例因子GL_c_SCALE,添加到有符号偏差GL_c_BIAS,并限制在[0,1]范围内(见glPixelTransfer)。