GPU中mipmap(LOD)的实现思想

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值