当前位置:   article > 正文

GPU中mipmap(LOD)的实现思想_mipmap实现

mipmap实现

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两个方向差值,即图元的大小。然后,将这两个参数传递给像素染色器,像素染色器再进行贴图的时候,再计算λ,最终完成纹理贴图。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/112742
推荐阅读