8-3.Mip贴图
2020-10-19 本文已影响0人
Pufus
Mip贴图
Mip 贴图
是一种功能强大的纹理技巧,它不仅
Mip 贴图
由一些列纹理图像组成,每个图像大小在某个轴的方向上都缩小一半,或者是原来图像像素总数的四分之一。
Mip 贴图层并不以一定是正方形的,但每个图像的大小都依次缩半,直到最后一个图像的大限是 1 x 1 的纹理单元
为止。
mipmap有多少个层级是有glTexImage1D、glTexImage2D载入纹理的第二个参数level决定的。 层级从0开始,0,1,2,3这样递增,如果没有使用mipmap技术,只有第0层的纹理会被加载。在默认情况下, 为了使用mipmap,所有层级都会被加载,但是我们可以用纹理参数来控制要加载的层级范围。
- 设置Mip 贴图
//GL_TEXTURE_BASE_LEVEL设置mip贴图基层level
//GL_TEXTURE_MAX_LEVEL设置mip贴图最⼤层level
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);
-
Mip贴图的纹理过滤
纹理过滤参数 -
压缩纹理
压缩纹理参数 -
glGetTexLevelParameter函数提取的压缩纹理格式
压缩纹理格式 -
GL_EXT_texture_compression_s3tc压缩格式
压缩格式 -
判断压缩与选择压缩⽅式
//根据选择的压缩纹理理格式,选择最快、最优、⾃自⾏行行选择的算法⽅方式选择压缩格式。
glHint(GL_TEXTURE_COMPRESSION_HINT, GL_FASTEST);
glHint(GL_TEXTURE_COMPRESSION_HINT, GL_NICEST);
glHint(GL_TEXTURE_COMPRESSION_HINT, GL_DONT_CARE);
加载压缩纹理
//target:GL_TEXTURE_1D、GL_TEXTURE_2D、GL_TEXTURE_3D
//level:指定所加载的mip贴图层次。⼀般我们都把这个参数设置为0。
//internalformat:每个纹理单元中存储多少颜⾊成分。
//width、height、depth参数:指加载纹理的宽度、高度、深度。
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);
//==注意!==
//这些值必须是2的整数次⽅。这是因为旧版本上的遗留下的⼀个要求。当然现在已经可以⽀持不是2的整数次方。但是开发者们还是习惯使用2的数次⽅参数。
//border:允许为纹理理贴图指定⼀一个边界宽度。
//format、type、data参数:与我们在讲glDrawPixels 函数对于的参数相同