持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情
- Swift Optional
- Swift Enum
- iOS开发 做一个三角形
- Swfit 指针类型
- Swift 属性(下)
- Swift 属性
- Swift 小结
- Swift 类与结构体(下)
- Swift 类的生命周期
- Swift 类的初始化器
- Swift 类与结构体
- OpenGL 压缩纹理
- OpenGL 隧道坐标计算
- 0penGL 像素格式及数据类型
- OpenGL 纹理对象
- OpenGL 纹理
- OpenGL 模型变化
- OpenGL 视图
- OpenGL 矩阵
- OpenGL 向量
- OpenGL 颜色混合
- OpenGL 深度测试的潜在风险
- OpenGL 浅析深度测试
- OpenGL 浅析隐藏面消除
- OpenGL 图元连接方式
- 记WKWebView与HTML完成交互两三事
- OpenGL 渲染流程图解析
- OpenGL 控制你的正方形
- OpenGL 专业名词解释
- OpenGL 环境搭建 - MacOS
今天开始,我们开始整理关于 OpenGL中纹理的知识点。
原始图像数据
1.像素包装
图像存储空间=图像的高度 * 图像宽度* 每个像素的字节数
认识函数
- 改变像素存储方式
void glPixelstorei (GLenum pname, GLint param);
- 恢复像素存储方式
void glPixelStoref (GLenum pname, GLfloat param) ;
- 参数1:GI UNPACK AIIGNMEN工 指定openGI 如何从数据缓存区中解包图像数据
- 参数2:表示参数GI UNPACK ALICNMENI 设置的值
- GL_UNPACK_ AL IGNMEN工 指内存中每个像素行起点的排列请求,允许设置为1(byte排列)、2(排列为偶数byte的行)、4 (宇wora排列)、8(行从双字节边界开始)
glPixelStorei(GL_UNPACK_ALIGNMENT,1);
认识函数 从颜色缓存区内容作为像素图直接读取
//参数1:2,矩形左下角的窗口坐标
//参数2:y,矩形左下角的窗口坐标
//参数3:wiath,矩形的宽,以像素为单位
//参数4:height,矩形的高,以像素为单位
//参数5:format,opencI 的像素格式,参考 表6-1
//参数6: type,解释参数pixe 1s指向的数据,告诉openGI 使用缓存区中的什么数据类型来存储颜色分量,像素数据的数据类型,参考 表6-2
//参数7:pixels,指向图形数据的指针
void glReadPixels (GLint s,GLint y,GIsizei vidth, GIsizei
height, GLenum format, GLenum type, const void * pixels) ;
glReadBuffer(mode);->指定读取的缓存
glWriteBuffer (mode),一>指定写入的缓存
认识函数
载入纹理
green void glTexImagelD (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, void *data) ;
void gllexImage2D (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) ;
- target:
GI IEXTURE 1D
、GITEXTURE_2D
、GL TEYTURE 3D
。 - Leve1:指定所加载的mip贴图层次。一般我们都把这个参数设置为0。
- internalformat:每个纹理单元中存储多少颜色成分。
- width、height、depth参数:指加载纹理的宽度、高度、深度。二=注意!==这些值必须是2的整数次方。 (这是因为opencL 1日版本上的遗留下的一个要求,当然现在已经可以支持不是2的整数次方。但是开发者们还是习惯使用以2的整数次方去设置这些参数。
- border参数:允许为纹理贴图指定一个边界宽度,
- format、txpe、data参数:与我们在讲g1DrawPixe1s 西数对于的参数相同
更新纹理
void glTexSubImagelD (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum
format, GLenum type, const GLvoid *data) ;
void glTexSubImage2D (GLenum target, GLint level, GLint x0ffset, GLint yOffset, GLsizei
width, Glsizei height, GLenum format, GLenum type, const GLvoid *data) ;
void glTexSubImage3D (GLenum target, GLint level, GLint x0ffset, GLint yOffset,GLint
Offset, GLsizei width, GLsizei height, GLsizei depth, Glenum type, const GLvoid * data) ;
插入替换纹理
void glopyTexSubImagelD(GLenum target, GLint level, GLint xoffset, GLint «, GLint y, GLsize width);
void glCopyTexSubImage2D (GLenum target, GLint level, GLint offset, GLint yoffset, GLint x,GLint Y, GLsizei width, Glsizei height) ;
void glCopyTexSubImage3D (GLenum target, GLint level, GLint offset, GLint yOffset, GLint zOffset, GLint ×, GLint y, GLsizei width, GLsizei height) ;
认识函数 使用颜色缓存区加载数据,形成新的纹理使用
void glCopyTexImagelD (GLenum target, GLint level, GLenum internalformt, GLint x, GLint y, GLsizei width, GLint border) ;
void glCopyTexImage2D (GLenum target, GLint level, GLenum internalformt, GLint ×, GLint y, GLsizei width, GLsizei height, GLint border);
- x,y 在颜色缓存区中指定了开始读取纹理数据的位置;缓存区里的数据,是源缓存区通过g1ReadBuffer设置的。
注意:不存在g1copyrextImage3D, 因为我们无法从2D 颜色缓存区中获取体积数据。