纹理常用API简介
##1:改变像素存储方式
void glPixelStorei (GLenum pname, GLint param);
##2:恢复像素存储方式
void glPixelStoref (GLenum pname, GLfloat param);
//参数(GLenum pname)1:GL_UNPACK_ALIGNMENT 指定OpenGL 如何从数据缓存区中解包图像 数据
参数( GLint param)2:表示参数GL_UNPACK_ALIGNMENT 设置的值
GL_UNPACK_ALIGNMENT 指内存中每个像素⾏行行起点的排列列请求,允许设置为1 (byte排列列)、2(排列列为偶数byte的⾏行行)、4(字word排列列)、8(⾏行行从双字节 边界开始)
例如:glPixelStorei(GL_UNPACK_ALIGNMENT,1);
3:从颜色缓存区内容作为像素图直接读取
void glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels) OPENGL_DEPRECATED(10.0, 10.14);
//参数1:x,矩形左下角的窗口坐标
参数2:y,矩形左下角的窗口坐标
参数3:width,矩形的宽,以像素为单位。
参数4:height,矩形的高,以像素为单位。
参数5:format,OpenGL的像素格式
参数6:type,解释参数pixels指向的数据,告诉OpenGL使用缓存区中的什么数据类型来存储颜色分量,像素数据的数据类型。
参数7:pixels,指向图形数据的指针
例如:glReadBuffer(mode);—> 指定读取的缓存
glWriteBuffer(mode);—> 指定写⼊入的缓存
4:载入纹理
1) void glTexImage1D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels) OPENGL_DEPRECATED(10.0, 10.14);
2) void glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels) OPENGL_DEPRECATED(10.0, 10.14);
3) void glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels) OPENGL_DEPRECATED(10.0, 10.14);
参数1: target:GL_TEXTURE_1D、GL_TEXTURE_2D、GL_TEXTURE_3D;
参数2:Level:指定所加载的mip贴图层次。一般我们吧这个参数设置为0;
参数3: internalformat:每个纹理单元中存储多少颜色成分;
参数4:width,height,depth,指加载纹理的宽度、高度、深度。注意:!老版本这些值必须是2的整数次方。(这是因为OpenGL旧版本上遗留下的一个要求。当然现在已经支持不是2的整数次方。但开发者们还是习惯使用以2的整数次方去设置这些参数)
参数5:border:允许为纹理贴图指定一个边界宽度
参数6:format:所读象素数据元素的格式(索引值或R、G、B、A值,如
表1-1所示)
参数7:type 像素数据的数据类型(GL_UNSIGNED_BYTE,每个颜色分量都是一个8位无符号整数)
参数8:pixels 指向图像数据的指针
名称 象素数据类型
GL_INDEX 单个颜色索引
GL_RGB 先是红色分量,再是绿色分量,然后是蓝色分量
GL_RED 单个红色分量
GL_GREEN 单个绿色分量
GL_BLUE 单个蓝色分量
GL_ALPHA 单个Alpha值
GL_LUMINANCE_ALPHA 先是亮度分量,然后是Alpha值
GL_STENCIL_INDEX 单个的模板索引
GL_DEPTH_COMPONENT 单个深度分量
表1-1 函数glReadPixels()及glDrawPixels()的象素格式
参考:https://blog.csdn.net/woaicide/article/details/50764416
5:更新纹理
1) void glTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels) OPENGL_DEPRECATED(10.0, 10.14);
2) void glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) OPENGL_DEPRECATED(10.0, 10.14);
3) void glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels) OPENGL_DEPRECATED(10.0, 10.14);
6:插入替换纹理
1) void glCopyTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) OPENGL_DEPRECATED(10.0, 10.14);
2) void glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) OPENGL_DEPRECATED(10.0, 10.14);
3) void glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) OPENGL_DEPRECATED(10.0, 10.14);
7:使用颜色缓存区加载数据,形成新的纹理使用
未完待续
网友评论