OpenGL-纹理映射Mipmap

No replies
Demi
Demi 的头像
Offline
Joined: 2017-03-07

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

闪烁,当屏幕上被渲染物体的表面与它所应用的纹理图像相比显得非常小时,就会出现闪烁,尤其当相机和物体在移动的时候,这种负面效果更容易出现。

性能问题,加载了大量纹理数据之后,还要对其缩小,在屏幕上显示的只是一小部分,纹理越大,所造成的影响越大。

Mipmap就可以解决上面那两个问题,当加载纹理的时候,不单单加载一个纹理,而是加载一系列从大到小的纹理mipmapped纹理状态,然后OpenGL会根据给定的几何图像的大小选择最合适的纹理,Mipmap是把纹理按照2的倍数进行缩放,知道图像1X1的大小,然后把这些图都存储起来,当要使用就选择一个合适的图像。但是这会增加一些额外的内存,在正方形的纹理贴图中使用Mipmap技术,大概要比原来多出三分之一的内存空间。

mipmap有多少个层级是有glTexImage的第二个参数level决定的。层级从0开始,0,1,2,3这样递增,如果没有使用mipmap技术,只有第0层的纹理会被加载。在默认情况下, 为了使用mipmap,所有层级都会被加载,但是我们可以用纹理参数来控制要加载的层级范围,使用glTexParameteri,第二个参数为GL_TEXTURE_BASE_LEVEL来指定最低层级的level,第三个参数GL_TEXTURE_MAX_LEVEL来指定最高层级的level,例如我只需要加载0到4层级的纹理。
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAX_LEVEL,4);
除此之外,我们还可通过GL_TEXTURE_MIN_LOD和GL_Texture_max_lOD来限制纹理的使用范围(最底层和最高层)

来源: IT问道

--电子创新网--
粤ICP备12070055号