09-OpenGL 纹理基础(下) - Mip贴图
2019-05-29 本文已影响0人
SPIREJ
Mip贴图(多级渐远纹理)
1. 什么是Mip贴图?
Mip贴图是一种功能强大的纹理技巧。他可以提高渲染性能同时可以改善场景的显示质量。
OpenGL
使用一种叫做多级渐远纹理(Mipmap)
的概念来自动生成一系列的纹理图像。

OpenGL
有一个glGenerateMipmaps
函数,在创建完一个纹理后调用,它就会承担接下来的所有工作了。

2. 设置Mip 贴图
//设置mip贴图基层
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_BASE_LEVEL,0);
//设置mip贴图最大层
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_LEVEL,0);
3. 什么时候生成Mip贴图?
只有minFilter
等于一下四种模式,才可以生成Mip贴图
//具有非常好的性能,并且闪烁现象非常弱
#define GL_NEAREST_MIPMAP_NEAREST 0x2700
//常用于对游戏进行加速,它使用了高质量的线性过滤器
#define GL_LINEAR_MIPMAP_NEAREST 0x2701
//过滤器在Mip层之间执行了一些额外的插值,以消除他们之间的过滤痕迹
#define GL_NEAREST_MIPMAP_LINEAR 0x2702
//三线性Mip贴图。纹理过滤的黄金准则,具有最高的精度
#define GL_LINEAR_MIPMAP_LINEAR 0x2703
if(minFilter == GL_LINEAR_MIPMAP_LINEAR ||
minFilter == GL_LINEAR_MIPMAP_NEAREST ||
minFilter == GL_NEAREST_MIPMAP_LINEAR ||
minFilter == GL_NEAREST_MIPMAP_NEAREST)
//4.加载Mip,纹理生成所有的Mip层
//参数:GL_TEXTURE_1D、GL_TEXTURE_2D、GL_TEXTURE_3D
glGenerateMipmap(GL_TEXTURE_2D);
4. 经过Mip贴图的纹理过滤

案例
1. 隧道
隧道案例中各个函数实现的功能

隧道效果

2.球体世界公转自转
公转自转案例中各个函数实现的功能

公转自转效果
