本發(fā)明涉及一種優(yōu)化繪制天空的方法,屬于計(jì)算機(jī)圖形領(lǐng)域。
背景技術(shù):
在3D游戲開發(fā)過(guò)程中需要繪制天空。以前天空繪制是用一個(gè)立方體紋理圖畫到球形網(wǎng)格上的方式繪制的,這個(gè)時(shí)候球形網(wǎng)格的頂點(diǎn)數(shù)量非常多,需要建立非常多的三角形才能達(dá)到繪制,從而導(dǎo)致頂點(diǎn)緩沖區(qū)(buffer)和索引buffer占用較大,也就是中央處理器(CPU)的內(nèi)存占用和圖形處理器(GPU)的顯存占用較大的現(xiàn)象。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)上述技術(shù)問(wèn)題,本發(fā)明提供一種優(yōu)化繪制天空的方法,只需要一個(gè)三角形網(wǎng)格就能把天空給繪制出來(lái),能保持原來(lái)的繪制效果同時(shí)也優(yōu)化了性能,實(shí)現(xiàn)更優(yōu)的天空繪制。
本發(fā)明的技術(shù)方案包括一種優(yōu)化繪制天空的方法,其特征在于,該方法包括:A.在視圖坐標(biāo)系構(gòu)建一個(gè)三角形并計(jì)算三角形的每個(gè)坐標(biāo)值;B.創(chuàng)建頂點(diǎn)緩沖和索引緩沖并傳入顯卡裝置,進(jìn)一步通過(guò)著色器反投影計(jì)算三角形每個(gè)頂點(diǎn)坐標(biāo)的世界坐標(biāo)值;C.傳入立方體紋理圖并對(duì)三角形的頂點(diǎn)進(jìn)行采樣,得到多個(gè)像素值,進(jìn)一步調(diào)用多媒體編程接口繪制出天空盒。
根據(jù)所述的優(yōu)化繪制天空的方法,其中步驟A還包括:S21,在視圖坐標(biāo)系構(gòu)建一個(gè)自定義的三角形;S22,確認(rèn)三角形的內(nèi)切正方形,其中,內(nèi)切正方形為虛擬攝像機(jī)視口;S23,通過(guò)虛擬攝像視口進(jìn)一步計(jì)算出三角形的每個(gè)坐標(biāo)值。
根據(jù)所述的優(yōu)化繪制天空的方法,其中步驟S22還包括:其中的虛擬攝像機(jī)視口是通過(guò)調(diào)用多媒體編程接口及圖形學(xué)原理進(jìn)行確認(rèn)。
根據(jù)所述的優(yōu)化繪制天空的方法,其中步驟B還包括:創(chuàng)建頂點(diǎn)緩沖和索引緩沖傳入顯卡中時(shí),使用著色器將每個(gè)頂點(diǎn)的坐標(biāo)反投影成世界坐標(biāo)系的坐標(biāo)值。
根據(jù)所述的優(yōu)化繪制天空的方法,其中步驟C還包括:通過(guò)世界坐標(biāo)系的三角形坐標(biāo)值來(lái)確定在立方體紋理圖中用到的采樣值,所述采樣值用于采樣立方體紋理圖的像素。
根據(jù)所述的優(yōu)化繪制天空的方法,其中步驟C還包括:在繪制過(guò)程中,根據(jù)視圖坐標(biāo)系的三角形頂點(diǎn)放出一條射線,獲取每個(gè)頂點(diǎn)世界坐標(biāo)系的坐標(biāo)值,以及,通過(guò)立方體紋理圖圖采樣出的像素值,通過(guò)光柵化輸出到繪制屏幕,進(jìn)而依次旋轉(zhuǎn)虛擬攝像機(jī),重新放出射線,循環(huán)執(zhí)行上述過(guò)程直至完成天空的繪制。
本發(fā)明的有益效果為:提高天空繪制速度,有效減少頂點(diǎn)數(shù)量和著色器的計(jì)算量,保持畫面流暢。
附圖說(shuō)明
圖1所示為根據(jù)本發(fā)明實(shí)施方式的繪制方法的流程圖;
圖2所示為根據(jù)本發(fā)明實(shí)施方式的三角形坐標(biāo)過(guò)程;
圖3所示為根據(jù)本發(fā)明實(shí)施方式的反投影采樣過(guò)程。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)描述。本發(fā)明的優(yōu)化繪制天空的方法適用于游戲中的天空繪制。
圖1所示為根據(jù)本發(fā)明實(shí)施方式的繪制方法的流程圖。繪制之前,代碼程序確定三角形每個(gè)頂點(diǎn)的坐標(biāo)值,因?yàn)樗窃谝晥D坐標(biāo)系的視口坐標(biāo),攝像機(jī)改變的時(shí)候,這些數(shù)據(jù)是不會(huì)發(fā)生變化的。繪制過(guò)程中,需要先把在顯存中的頂點(diǎn)數(shù)據(jù)進(jìn)行反投影計(jì)算,得出每個(gè)頂點(diǎn)對(duì)應(yīng)的世界坐標(biāo),再采樣出紋理顏色值,然后進(jìn)行繪制。由此,執(zhí)行上述方法的客戶端可以保持天空的效果,同時(shí)還能減少繪制數(shù)量。
根據(jù)三角形的頂點(diǎn)數(shù)據(jù),就只需要繪制一個(gè)三角形,就繪制一次,而不是一個(gè)天空網(wǎng)格,如果是天空網(wǎng)格,它有8個(gè)頂點(diǎn),相應(yīng)的紋理坐標(biāo)也需要8個(gè),數(shù)據(jù)量就多了好幾倍,內(nèi)存占用和顯存占用也多了好幾倍,資源消耗較大,所以三角形的天空繪制就達(dá)到了優(yōu)化效果。
圖2所示為根據(jù)本發(fā)明實(shí)施方式的三角形坐標(biāo)過(guò)程。在確定三角形坐標(biāo)過(guò)程中,需要明白Viewport的中心坐標(biāo)和長(zhǎng)寬,中心坐標(biāo)為(0,0),長(zhǎng)和寬為2,即左下角坐標(biāo)為(-1,-1),右上角坐標(biāo)為(1,1,),從而確定三角形每個(gè)頂點(diǎn)的坐標(biāo)分別為(-1,3)(-1,-1)(3,-1)。確定坐標(biāo)之后就是建立頂點(diǎn)緩沖和索引緩沖,傳入顯卡中進(jìn)行著色器計(jì)算,這個(gè)時(shí)候每個(gè)坐標(biāo)都需要進(jìn)行反投影計(jì)算,因?yàn)槊總€(gè)坐標(biāo)是視口坐標(biāo),所以計(jì)算的時(shí)候需要乘以世界矩陣的逆矩陣,得到世界坐標(biāo)系中的三維坐標(biāo),然后在像素著色器中坐標(biāo)值跟天空紋理圖進(jìn)行采樣,天空紋理圖是一個(gè)三維紋理,就會(huì)得到一個(gè)紋理顏色值,天空的效果就可以畫出來(lái)。
圖3所示為根據(jù)本發(fā)明實(shí)施方式的反投影采樣過(guò)程。主要涉及確定三角形坐標(biāo)過(guò)程與反投影采樣過(guò)程。確定三角形坐標(biāo)過(guò)程即根據(jù)三角形的內(nèi)切正方形剛好是窗口視口坐標(biāo)(Viewport)的原則來(lái)確定每個(gè)頂點(diǎn)坐標(biāo)值。反投影采樣過(guò)程即在顯卡中用著色器把每個(gè)三角形頂點(diǎn)坐標(biāo)做反投影計(jì)算,得到這個(gè)坐標(biāo)反投射出來(lái)的世界坐標(biāo),再根據(jù)這個(gè)世界坐標(biāo)和天空紋理進(jìn)行采樣,得到紋理顏色值來(lái)繪制天空效果。
以上所述,只是本發(fā)明的較佳實(shí)施例而已,本發(fā)明并不局限于上述實(shí)施方式,只要其以相同的手段達(dá)到本發(fā)明的技術(shù)效果,都應(yīng)屬于本發(fā)明的保護(hù)范圍。在本發(fā)明的保護(hù)范圍內(nèi)其技術(shù)方案和/或?qū)嵤┓绞娇梢杂懈鞣N不同的修改和變化。