OpenGL学习 - 纹理
常用函数:
![9969adf91e6e6a894b4c9153ed440747.png](https://img-blog.csdnimg.cn/img_convert/9969adf91e6e6a894b4c9153ed440747.png)
纹理
纹理只是一种能够应用到场景中的三角形上的图像数据,它通过经过过滤的纹理单元(texture,相当于基于纹理的像素)填充到实心区域。
一、原始图像数据
1、像素包装
图像存储空间 = 图像的高度 * 图像的宽度 *每个像素的字节数
改变或恢复像素的存储方式
void glPixelStorei (GLenum pname, GLint param);
void glPixelStoref (GLenum pname, GLfloat param);
例:紧密包装像素数据,则调用函数:
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
参数1: GL_UNPACK_ALIGNMENT 指定OpenGL 如何从数据缓冲区中解包图像数据。
参数2:表示参数GL_UNPACK_ALIGNMENT 设置的值,指内存中每个像素行起点的排列请求,允许设置为:1(byte排列)、2(排列为偶数byte的行)4、(字word排列)、8(行从双字节边界开始)
下表中(glPixelStore参数)列出了这个函数支持的像素存储模式的完整列表
glPixelStore 参数
![ab0f6129388c3de8d4807aaf4aca09e9.png](https://img-blog.csdnimg.cn/img_convert/ab0f6129388c3de8d4807aaf4aca09e9.png)
2、像素图
/**
* 将颜色缓冲区内容作为像素图直接读取
* void glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);
* @param x : 矩形左下角的窗口坐标x
* @param y : 矩形左下角的窗口坐标y
* @param width : 矩形的宽度,以像素为单位
* @param height : 矩形的高度,以像素为单位
* @param format : OpenGL 的像素格式,参考,表6-1
* @param type : 解释参数pixels指向的数据,告诉OpenGL使用缓存区中的什么数据类型来存储颜色分量,像素数据的数据类型,参考表6-2
* @param pixels : 指向图形数据的指针
*/
OpenGL像素格式
![7add0b71c146dcd888de5cda7a3c4300.png](https://img-blog.csdnimg.cn/img_convert/7add0b71c146dcd888de5cda7a3c4300.png)
最后3个格式GL_STENCIL_INDEX、GL_DEPTH_COMPONENT和GL_DEPTH_STENCIL用于对模板缓冲区和深度缓冲区直接进行读写。参数type解释参数pixels指向的数据,它告诉OpenGL使用缓冲区中的什么数据类型来存储颜色分量。如表:像素数据的数据类型
像素数据的数据类型