posts - 72,  comments - 4,  trackbacks - 0
2d游戏中可以做到局部更新,3d游戏中这种处理已经绝迹了,最近还是尝试弄了下,
3d游戏中界面的局部更新问题

要在3d游戏中使用界面系统的局部更新,需要先准备一块画布,然后界面局部更新时刷新到这块画布上,这样每帧只画画布
虽然之前有想过这样的方法,但一直没去弄过,最近弄了下,碰到的问题在于使用的带透明信息的文字渲染上, 如下:
最近有人再次讨论了这个问题,为了说明这个问题我又重新整理了下,新整理如下:
3d游戏中界面脏矩形碰到的alpha排序问题:
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 阅读(245) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理