通常,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);发布于 2017-11-15 16:45:05
GLubyte texels[] = {
100, 200, 0, 0,
200, 250, 0, 0
};OpenGL将只读取其中的4个值。因为GL_UNPACK_ALIGNMENT默认为4,所以OpenGL期望每一行像素数据对齐为4个字节。因此,每行中的两个0只是填充,因为编写这段代码的人不知道如何更改对齐方式。
因此,OpenGL将100, 200作为第一行读取,然后跳到下一个4字节边界,并将200, 250作为第二行读取。
发布于 2017-11-15 16:37:24
GL_LUMINANCE: 每个元素都是一个单一亮度值。 GL将其转换为浮点,然后通过复制红色、绿色和蓝色的亮度值三次并为alpha附加1,将其组装为RGBA元素。然后,每个组件乘以有符号缩放因子GL_c_SCALE,添加到有符号偏置GL_c_BIAS中,然后夹紧到范围0,1。
https://stackoverflow.com/questions/47312524
复制相似问题