OpenGL 纹理常用函数纪录

502 阅读3分钟

1、从颜色缓存区内容作为像素图直接读取纹理

void glReadPixels(GLint x,GLint y,GLSizei width,GLSizeiheight, GLenum format, GLenum type,const void * pixels)
参数1、2:x,y 矩形左下角窗口坐标
参数3:矩形宽度
参数4:矩形高度
参数5:像素格式
参数6:类型 用于告诉opengl使用缓存中的什么数据类型来存储颜色分量
参数7:指向图形数据的指针

2、载入纹理

void glTexImage1D(GLenum target,GLint level,GLint
 internalformat,GLsizei width,GLint border,GLenum
 format,GLenum type,void *data);
 
 void glTexImage2D(GLenum target,GLint level,GLint
 internalformat,GLsizei width,GLsizei height,GLint
 border,GLenum format,GLenum type,void * data);
 
 void glTexImage3D(GLenum target,GLint level,GLint internalformat,GLSizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,void *data)
 
 参数1:对应的纹理结构是 GL_TEXTURE_1D`、`GL_TEXTURE_2D`、`GL_TEXTURE_3D`。
 参数2:lveel 指定加载的mip贴图层次。通常为0
 参数3:每个纹理单元中存储的颜色成分
 参数4:加载纹理的宽高(这些值必须是2的整数次方)
 参数5:纹理指定的边界宽度
 参数:format、type、data 同上。

3、更新纹理

void glTexSubImage1D(GLenum target,GLint level,GLint xOffset,GLsizei width,GLenum
format,GLenum type,const GLvoid *data);
void glTexSubImage2D(GLenum target,GLint level,GLint xOffset,GLint yOffset,GLsizei
width,GLsizei height,GLenum format,GLenum type,const GLvoid *data);
void glTexSubImage3D(GLenum target,GLint level,GLint xOffset,GLint yOffset,GLint
zOffset,GLsizei width,GLsizei height,GLsizei depth,Glenum type,const GLvoid * data)

4、插入替换纹理

void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsize
width);
 void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yOffset,GLint x,
 y,GLsizei width,GLsizei height);
 void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yOffset,GLint
 zOffset,GLint x,GLint y,GLsizei width,GLsizei height);

5、使用颜色缓存区加载数据,形成新的纹理

void glCopyTexImage1D(GLenum target,GLint level,GLenum
internalformt,GLint x,GLint y,GLsizei width,GLint border);
// 二维
void glCopyTexImage2D(GLenum target,GLint level,GLenum
 internalformt,GLint x,GLint y,GLsizei width,GLsizei
height,GLint border);

6、纹理对象获取

1、分配纹理对象

void glGenTextures(GLsizei n,GLuint * textTures);

2、绑定纹理状态

void glBindTexture(GLenum target,GLunit texture);

3、删除绑定纹理对象

void glDeleteTextures(GLsizei n,GLuint *textures);

4、测试纹理对象是否有效

如果有效回返回GL_TRUE,否则返回GL_FALSE。
GLboolean glIsTexture(GLuint texture);

7、设置纹理参数

glTexParameterf(GLenum target,GLenum pname,GLFloat param);
glTexParameteri(GLenum target,GLenum pname,GLint param);
glTexParameterfv(GLenum target,GLenum pname,GLFloat *param);
glTexParameteriv(GLenum target,GLenum pname,GLint *param);
参数1:指定要应用的纹理模式
参数2:指定需要设置的纹理参数
参数3:设置特定的纹理参数值

8、设置过滤方式

1、临近过滤 GL_NEAREST

获取相邻的数据纹理进行数据渲染  
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST) 纹理理缩⼩小时,使⽤用邻近过滤

2、线性过滤 GL_LINEAR

选中临近的数据纹理指进行混合
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR) 纹理理放⼤大时,使⽤用线性过滤

9、设置环绕方式

1、GL_REPEAT 纹理默认行为为重复。

2、GL_MIRRPRED_REPEAT 同上效果一样,不过重复的图片是镜像放置的

3、GL_CLAMP_TO_COGE 纹理坐标会被会约束在0到1之间,超出部分会重复纹理边缘,产生类似拉伸的效果

4、GL_CLAMP_TO_BORDER 指定超过纹理的部分用某个颜色填充

glTextParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAR_S,GL_CLAMP_TO_EDGE); 
glTextParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAR_T,GL_CLAMP_TO_EDGE);

10、设置MIP贴图

//设置mip贴图基层 	glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_BASE_LEVEL,0);
//设置mip贴图最⼤大层 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_BASE_LEVEL,0);

11、判断纹理是否被压缩

glGetTexLevelParameteriv(GL_TEXTURE_2D,0,GL_TEXTURE_COMPRESSED,&comFlag);

12、设置纹理压缩方式

glHint(GL_TEXTURE_COMPRESSION_HINT,GL_FASTEST);
glHint(GL_TEXTURE_COMPRESSION_HINT,GL_NICEST); 		glHint(GL_TEXTURE_COMPRESSION_HINT,GL_DONT_CARE)

13、加载压缩纹理

void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalFormat,GLsizeiwidth,GLint border,GLsizei imageSize,void *data);

void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalFormat,GLsizeiwidth,GLint heigth,GLint border,GLsizei imageSize,void *data);

void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalFormat,GLsizeiwidth,GLsizei heigth,GLsizei depth,GLint border,GLsizei imageSize,void *data);