OpenGL 压缩纹理

323 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情


  1. Swift Optional
  2. Swift Enum
  3. iOS开发 做一个三角形
  4. Swfit 指针类型
  5. Swift 属性(下)
  6. Swift 属性
  7. Swift 小结
  8. Swift 类与结构体(下)
  9. Swift 类的生命周期
  10. Swift 类的初始化器
  11. Swift 类与结构体
  12. OpenGL 压缩纹理
  13. OpenGL 隧道坐标计算
  14. 0penGL 像素格式及数据类型
  15. OpenGL 纹理对象
  16. OpenGL 纹理
  17. OpenGL 模型变化
  18. OpenGL 视图
  19. OpenGL 矩阵
  20. OpenGL 向量
  21. OpenGL 颜色混合
  22. OpenGL 深度测试的潜在风险
  23. OpenGL 浅析深度测试
  24. OpenGL 浅析隐藏面消除
  25. OpenGL 图元连接方式
  26. 记WKWebView与HTML完成交互两三事
  27. OpenGL 渲染流程图解析
  28. OpenGL 控制你的正方形
  29. OpenGL 专业名词解释
  30. OpenGL 环境搭建 - MacOS

压缩纹理

上一篇,我们总结整理了,隧道的坐标计算过程,今天,我们来看一下 压缩纹理的相关内容:

通用压缩纹理格式

通用的压缩纹理格式及其内容见下表:

压缩格式基本内部格式
GL_COMPRESSED_RGBGL_RGB
GL_COMPRESSED_RGBAGL_RGBA
GL_COMPRESSED_SRGBGL=RGB
GL_COMPRESSED_SRGB_ALPHAGL_RGBA
GL_COMPRESSED_REDGL_RED
GL_COMPRESSED_RGGL_RG

判断压缩 与 选择压缩方式

我们可以通过 glHintglint函数 来设置 压缩纹理格式, 可以选择 最快、最优或者自行选择的算法方式来进行格式的压缩。

//根据选择的压缩纹理格式,选择最快、最优、自行选择的算法方式选择压缩格式。
glHint (GI TEXTURE_ COMPRESSION_ HINT,GI FASTEST);
glint (GL_TEXTURE_ COMPRESSION HINT, GL_NICEST) ;
glint (GL_ TEXTURE_ COMPRESSION HINT, GL_DONT_ CARE) ;

加载压缩纹理

家在纹理我们使用 glCompressedTexImage1DglCompressedlexImage2DglCompressedlexImage3D 三个函数方法来加载 压缩纹理。

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

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

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

参数内容解释如下:

  • target : GI_TEXTURE_1DCI TEXTURE 2DGI IEXTURE 3D
  • Level:指定所加载的mip贴图层次。一般我们都把这个参数设置为0。
  • internalformat:每个纹理单元中存储多少颜色成分。
  • wiath、height、depth参数:指加载纹理的宽度、高度、深度。一=注意!二=这些值必须是2的整数次方。(这是因为旧版本上的遗留下的一个要求。当然现在已经可以支持不是2的整数次方。但是开发者们还是习惯使用以2的整数次方参数。)
  • border参数:允许为纹理贴图指定一个边界宽度。
  • format、type、data参数:与我们在讲g1DrawPixels函数对于的参数相同。

glGetTexLevelParameter函数提取的压缩纹理格式

提取的压缩纹理格式如下表:

参数返回
GL_TEXTURE_COMPRESSED如果纹理被压缩,返回1,否则返回0
GL_TEXTURE_COMPRESSED_IMAGE_SIZE压缩后的纹理的大小(以字节为单位)
GL_TEXTURE_ INTERNAL_FORMAT所使用的压缩格式
GL_NUM COMPRESSED_TEXTURE FORMATS受支持的压缩纹理格式数量
GL_COMPRESSED_TEXTURE_FORMATS一个包含了一些常量值的数组,每个常量值对应于一种受支持的压缩纹理格式
GL_TEXTURE_COMPRESSION_HINT压缩纹理提示的值 (GL/NICEST/GL FASTEST)

GL_EXT_texture_compression_s3tc压缩格式

其中 压缩格式内容如下表:

格式描述
GL_COMPRESSED_GB_S3TC_DXT1RGB数据被压缩,alpha值始终是1.0
GL_COMPRESSED_GBA_S3TC_DXT1RGBA数据被压缩,alpha值返回1.0或者0.0
GL_COMPRESSED_GAB_S3TC_DXT3RGB值被压缩,alpha值用4位存储
GL_COMPRESSED_GBA_SETC_DXT5RGB数据被压缩,alpha值是一些8位值的加权平均值