代码之家  ›  专栏  ›  技术社区  ›  Narek

当调用glTexImage2D时,在GL_亮度的情况下的Texel数据

  •  1
  • Narek  · 技术社区  · 7 年前

    通常,texel是RGBA值。texel在以下代码中表示什么数据:

    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 回复  |  直到 7 年前
        1
  •  4
  •   Nicol Bolas    7 年前
    GLubyte texels[] = {
        100, 200,  0,  0,
        200,  250,  0,  0
    };
    

    GL_UNPACK_ALIGNMENT 默认值为4,OpenGL期望 each row of pixel data to be aligned to 4 bytes . 所以每行中的两个0只是填充,因为编写此代码的人不知道如何更改对齐方式。

    因此OpenGL将读取 100, 200 200, 250 作为第二排。

        2
  •  1
  •   genpfault    7 年前

    GL_LUMINANCE :

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

    推荐文章