解释glTexImage1D的参数internalformat与format

发布于:2024-03-14 ⋅ 阅读:(72) ⋅ 点赞:(0)

函数

函数原型:

void WINAPI glTexImage1D(
         GLenum  target,
         GLint   level,
         GLint   internalformat,
         GLsizei width,
         GLint   border,
         GLint   format,
         GLenum  type,
   const GLvoid  *pixels
);

该函数用于设置一维纹理图像,更多详情请参考文档glTexImage1D 函数

参数

internalformat

指定纹理中颜色分量的数量和精度

可选值 含义 颜色值
GL_ALPHA 分量数为1 (0, 0, 0, a)
GL_ALPHAX 分量数为1,每个颜色分量使用X位存储,X可选为4, 8, 12, 16 (r, 0, 0, 1)
GL_LUMINANCE 分量数为1 (l, l, l, 1)
GL_LUMINANCEX 分量数为1,每个颜色分量使用X位存储 (l, l, l, 1)
GL_LUMINANCE_ALPHA 分量数为2 (l, l, l, a)
GL_LUMINANCEX_ALPHAY 分量数为2,第一个分量使用X位存储,第二个分量使用Y位存储 (l, l, l, a)
GL_INTENSITY 分量数为1 (i, i, i, i)
GL_INTENSITYX 分量数为1,每个颜色分量使用X位存储 (i, i, i, i)
GL_RGB 分量数为3 (r,g,b,1)
GL_RGBX 分量数为3,每个颜色分量使用X位存储 (r,g,b,1)
GL_RX_GY_BZ 分量数为3,R分量使用X位存储,G分量使用Y位存储,B分量使用Z位存储 (r,g,b,1)
GL_RGBA 分量数为4 (r,g,b,a)
GL_RGBAX 分量数为4,每个颜色分量使用X位存储 (r,g,b,a)
GL_RGBX_AY 分量数为4,R、G、B分量各使用X位存储,A分量使用Y位存储 (r,g,b,a)

format

指定传入像素数据(pixels)的颜色格式

可选值 分量数 颜色值
GL_RED 1 (r, 0, 0, 1)
GL_GREEN 1 (0, g, 0, 1)
GL_BLUE 1 (0, 0, b, 1)
GL_ALPHA 1 (0, 0, 0, a)
GL_RGB 3 (r,g,b,1)
GL_RGBA 4 (r,g,b,a)
GL_BGR_EXT 3 (b,g,r,1)
GL_BGRA_EXT 4 (b,g,r,a)
GL_LUMINANCE 1 (l, l, l, 1)
GL_LUMINANCE_ALPHA 2 (l, l, l, a)

示例

使用下方代码生成一个纹理

GLubyte *data = new GLubyte[4];
data[0] = 50; data[1] = 100; data[2] = 150; data[3] = 200;

GLuint tex;
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_1D, tex);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

下面有3种示例用于区分glTexImage1D的不同参数对纹理的影响

示例1

glTexImage1D(GL_TEXTURE_1D, 0, GL_BGRA_EXT, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);

一个像素
外部输入颜色为(50, 100, 150, 200)
纹理内部颜色为(150, 100, 50, 200)

示例2

glTexImage1D(GL_TEXTURE_1D, 0, GL_INTENSITY, 2, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, data);

两个像素
外部输入颜色分别为(50, 50, 50, 100)和(150, 150, 150, 200)
对应的纹理内部颜色分别为(50, 50, 50, 50)和(150, 150, 150, 150)

示例3

glTexImage1D(GL_TEXTURE_1D, 0, GL_LUMINANCE_ALPHA, 4, 0, GL_GREEN, GL_UNSIGNED_BYTE, data);

四个像素
外部输入颜色分别为(0, 50, 0, 0)、(0, 100, 0, 0)、(0, 150, 0, 0)和(0, 200, 0, 0)
对应的纹理内部颜色分别为(0, 0, 0, 50)、(0, 0, 0, 100)、(0, 0, 0, 150)和(0, 0, 0, 200)


网站公告

今日签到

点亮在社区的每一天
去签到