赞
踩
Mipmap的实现方法
纹理贴图的时候,我们会经常遇到这样的场景。当一个纹理对象迅速的远离观察点而去时,纹理图像必须随被投影的图像一起缩小。这个时候,如果处理不当,经常会出现闪烁或抖动现象。例如,大纹理图像映射到小物体上时,当物体移动,就会产生闪烁或抖动。为了解决这个问题,就需要MIPMAP技术。
MIPMAP就是采用一系列预先过滤的分辨率递减的纹理图像。纹理贴图时,依据被贴物体的大小自动选择采用大小相适应的MIPMAP纹理图像进行贴图。
MIPMAP纹理图像的产生:一般的都是纹理图像的宽长等比缩小1倍,当宽长缩小到1的时候,不在缩放。如:64x16的纹理图像,其MIPMAP图像大小依此是32x8、16x4、8x2、4x1、2x1、1x1。
MIPMAP层的选择方法:假定纹理图像的宽高为w/h,被贴图图元像素大小(矩形为例)wp/hp
定义缩放因子:ρ = max{w/wp, h/hp}
MIPMAP层:λ = + lodbias
这里的lodbias表示偏移细节层,它是glTexEnv*()函数设置的一个常数,用于对λ进行调整。
这里λ就是该物体需要选择的MIPMAP纹理的层数。
当λ > 0.0,就需要使用缩小滤波后的纹理图;
当λ <= 0.0,纹理大小小于别贴图图元,因此需要使用放大过的滤波器。
电路实现时,可以在光栅化阶段,计算出图元的x/y两个方向差值,即图元的大小。然后,将这两个参数传递给像素染色器,像素染色器再进行贴图的时候,再计算λ,最终完成纹理贴图。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。