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贴图
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);