2d游戲中可以做到局部更新,3d游戲中這種處理已經(jīng)絕跡了,最近還是嘗試弄了下,
3d游戲中界面的局部更新問(wèn)題
要在3d游戲中使用界面系統(tǒng)的局部更新,需要先準(zhǔn)備一塊畫(huà)布,然后界面局部更新時(shí)刷新到這塊畫(huà)布上,這樣每幀只畫(huà)畫(huà)布
雖然之前有想過(guò)這樣的方法,但一直沒(méi)去弄過(guò),最近弄了下,碰到的問(wèn)題在于使用的帶透明信息的文字渲染上, 如下:
最近有人再次討論了這個(gè)問(wèn)題,為了說(shuō)明這個(gè)問(wèn)題我又重新整理了下,新整理如下:
3d游戲中界面臟矩形碰到的alpha排序問(wèn)題:
3d游戲中界面臟矩形碰到的alpha排序問(wèn)題:
界面是一張半透明底圖,上面畫(huà)一些半透明的字,
這里測(cè)試我們假設(shè)只用一個(gè)顏色分量(值范圍為0-255)
如下:
scene = 100; // 場(chǎng)景,
tex = 150; // 貼圖
text = 200; // 文字
a1 = 0.2f; // 貼圖alpha
a2 = 0.3f; // 文字alpha
下面對(duì)正常渲染方式和臟矩形渲染方式分別測(cè)試結(jié)果:
【法一】。正常順序渲染方法:
dest = (scene*(1-a1)+tex*a1)*(1-a2)+text*a2
= (100*0.2+150*0.8)*0.3+200*0.7
=42+140
=182
【法二】。臟矩形的渲染到貼圖方法:
目標(biāo)貼圖rt清為全黑0,alpha為1
1. 先將tex渲染到目標(biāo)貼圖
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. 最后將其和場(chǎng)景混合:
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 閱讀(259)
評(píng)論(0) 編輯 收藏 引用