Mip贴图
Mip贴图是一种强大的纹理技巧,它可以提高渲染性能同时改善场景的显示质量,它是特别针对纹理缩小时的显示效果。
想象一下,假设我们有一个包含着上千物体的大房间,每个物体上都有纹理。有
些物体会很远,但其纹理会拥有与近处物体同样高的分辨率。由于远处的物体可能只产生很少的片段,OpenGL从高分辨率纹理中为这些片段获取正确的颜色值就很困难,因为它需要对一个跨过纹理很大部分的片段只拾取一个纹理颜色。在小物体上这会产生不真实的感觉,更不用说对它们使用高分辨率纹理浪费内存的问题了。
OpenGL使用一种叫做多级渐远纹理(Mipmap)的概念来解决这个问题,它简单来说就是一系列的纹理图像,后一个纹理图像是前一个的二分之一。多级渐远纹理背后的理念很简单:距观察者的距离超过一定的阈值,OpenGL会使用不同的多级渐远纹理,即最适合物体的距离的那个。由于距离远,解析度不高也不会被用户注意到。同时,多级渐远纹理另一加分之处是它的性能非常好。让我们看一下多级渐远纹理是什么样子的:
Mip贴图示例.png
使用Mip贴图
只有minFilter等于以下四种模式,才可生成Mip贴图
- GL_NEAREST_MIPMAP_NEAREST: 具有很好的性能,且闪烁现象较弱
- GL_LINEAR_MIPMAP_NEAREST:使用了高质量的线性过滤器,游戏中常用
- GL_LINEAR_MIPMAP_LINEAR 和GL_NEAREST_MIPMAP_LINEAR 过滤器在Mip层之间插入了一些额外的值,以消除他们之间的过略痕迹
if (minFilter == GL_LINEAR_MIPMAP_LINEAR ||
minFilter == GL_LINEAR_MIPMAP_NEAREST ||
minFilter == GL_NEAREST_MIPMAP_LINEAR ||
minFilter == GL_NEAREST_MIPMAP_NEAREST)
//为纹理对象生成一组完整的mipmap
glGenerateMipmap(GL_TEXTURE_2D);
图片.png
网友评论