3d游戏中界面脏矩形碰到的alpha排序问题:
界面是一张半透明底图,上面画一些半透明的字,
这里测试我们假设只用一个颜色分量(值范围为0-255)
如下:
scene = 100; // 场景,
tex = 150; // 贴图
text = 200; // 文字
a1 = 0.2f; // 贴图alpha
a2 = 0.3f; // 文字alpha
下面对正常渲染方式和脏矩形渲染方式分别测试结果:
【法一】。正常顺序渲染方法:
dest = (scene*(1-a1)+tex*a1)*(1-a2)+text*a2
= (100*0.2+150*0.8)*0.3+200*0.7
=42+140
=182
【法二】。脏矩形的渲染到贴图方法:
目标贴图rt清为全黑0,alpha为1
1. 先将tex渲染到目标贴图
clr1 = rt*(1-a1)+tex*a1
= tex*a1
= 30
alpha = a1
= 0.2f
2. 然后再渲染文字:
clr2 = clr1*(1-a2)+text*a2
= 30*0.7f+200*0.3f
= 81
alpha = alpha * a2
= 0.2*0.3
= 0.6
3. 最后将其和场景混合:
dest = scene*(1-alpha) + clr2*alpha
=100*0.4 + 81*0.6
=40+48.6
=88.6
posted on 2011-06-24 11:51
flipcode 阅读(257)
评论(0) 编辑 收藏 引用