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 閱讀(257)
評論(0) 編輯 收藏 引用