OpenGL之纹理映射Mipmap

2018-03-06  本文已影响101人  我的大好时光
一、Mipmapping

1、Mipmapping是一个功能强大的纹理技术,它可以提高渲染的性能以及提升场景的视觉质量,它可以用来解决一般纹理贴图出现的两个常见问题:

2、Mipmap就可以解决上面那两个问题,当加载纹理的时候,不单单加载一个纹理,而是加载一系列从大到小的纹理mipmapped纹理状态,然后OpenGL会根据给定的几何图像的大小选择最合适的纹理。

3、Mipmap是把纹理按照2的倍数进行缩放,直到图像1X1的大小,然后把这些图都存储起来,当要使用就选择一个合适的图像。

4、但是这会增加一些额外的内存,在正方形的纹理贴图中使用Mipmap技术,大概要比原来多出三分之一的内存空间。

5、mipmap有多少个层级是有glTexImage1D、glTexImage2D载入纹理的第二个参数level决定的。 层级从0开始,0,1,2,3这样递增,如果没有使用mipmap技术,只有第0层的纹理会被加载。

6、在默认情况下, 为了使用mipmap,所有层级都会被加载,但是我们可以用纹理参数来控制要加载的层级范围:

例如我只需要加载0到4层级的纹理

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0); 
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAX_LEVEL,4); 
二、Mipmap过滤
纹理过滤模式.png
三、各向同性采样 & 各向异性采样
当需要贴图的三维平面平行于viewport, 则是各向同性的。

当需要贴图的三维平面与屏幕有一定夹角,则是各向异性的。

四、纹理压缩
通用压缩纹理格式.png

1、判断压缩

GLint comFlag;
//判断纹 是否被成功压缩 
glGetTexLevelParameteriv(GL_TEXTURE_2D,0,GL_TEXTURE_COMPRESSED,&comFlag);

2、根据选择的压缩纹 格式,选择最快、最优、 选择的算法 式选择压缩格式。

glHint(GL_TEXTURE_COMPRESSION_HINT,GL_FASTEST)
glHint(GL_TEXTURE_COMPRESSION_HINT,GL_NICEST)
glHint(GL_TEXTURE_COMPRESSION_HINT,GL_DONT_CARE)

3、加载压缩纹理

/**
target: `GL_TEXTURE_1D`、`GL_TEXTURE_2D`、`GL_TEXTURE_3D`。
Level: 指定所加载的mip贴图层次。 般我们都把这个参数设置为0。
internalformat: 每个纹 单元中存储多少颜 成分。
width、height、depth: 指加载纹 的宽度、 度、深度。==注意!==这些值必须是2的整数次 。(这是因为O
旧版本上的遗 下的 个要求。当然现在已经可以 持 是2的整数次 。但是开发者们还是习惯使 以2的整数次 去
参数。)
border:允许为纹 贴图指定 个边界宽度。 
format: 像素格式
type: 像素类型
data:纹理压缩的数据
*/
void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalFormat,GLsizei
 width,GLint border,GLsizei imageSize,void *data)

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

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

4、提取压缩纹理格式


提取压缩纹理格式.png

5、GL_EXT_texture_compression_s3tc压缩格式详解

texture_compression_s3tc压缩格式.png
上一篇 下一篇

猜你喜欢

热点阅读