8-3.Mip贴图

2020-10-19  本文已影响0人  Pufus

Mip贴图

Mip 贴图是一种功能强大的纹理技巧,它不仅\color{rgb(255, 127, 80)}{可以提高渲染性能,而且可以改善场景的显示质量。}

Mip 贴图由一些列纹理图像组成,每个图像大小在某个轴的方向上都缩小一半,或者是原来图像像素总数的四分之一。

缩放

Mip 贴图层并不以一定是正方形的,但每个图像的大小都依次缩半,直到最后一个图像的大限是 1 x 1 的纹理单元为止。

mipmap有多少个层级是有glTexImage1D、glTexImage2D载入纹理的第二个参数level决定的。 层级从0开始,0,1,2,3这样递增,如果没有使用mipmap技术,只有第0层的纹理会被加载。在默认情况下, 为了使用mipmap,所有层级都会被加载,但是我们可以用纹理参数来控制要加载的层级范围。

//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); 
//根据选择的压缩纹理理格式,选择最快、最优、⾃自⾏行行选择的算法⽅方式选择压缩格式。
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 函数对于的参数相同
上一篇 下一篇

猜你喜欢

热点阅读