函数
函数原型:
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)