本發(fā)明涉及圖形技術(shù)領(lǐng)域,特別涉及一種在游戲場景中顯示天空球的方法和裝置。
背景技術(shù):
隨著計算機(jī)軟、硬件突飛猛進(jìn)的發(fā)展,計算機(jī)圖形學(xué)在各個行業(yè)的應(yīng)用也得到迅速普及和深入。目前,計算機(jī)圖形學(xué)己進(jìn)入三維時代,三維圖形在人們周圍無所不在??茖W(xué)計算可視化、計算機(jī)動畫和虛擬現(xiàn)實(shí)已經(jīng)成為近年來計算機(jī)圖形學(xué)的三大熱門話題,而這三大熱門話題的技術(shù)核心均為三維圖形。
天空是當(dāng)前圖形引擎場景制作中重要的一部分,通過它可以表達(dá)時間,天氣,塑造氣氛等等。目前,顯示天空的方法包括天空盒和天空球兩種。
傳統(tǒng)的天空球采用經(jīng)緯線劃分方法,有南北極和赤道部分。然而,在經(jīng)緯線劃分方法中,在對應(yīng)紋理貼圖時,整個球面的紋理密度是不統(tǒng)一的。在南北極部分紋理密度過大,會有堆積現(xiàn)象,在赤道部分紋理密度過小,會有拉伸現(xiàn)象。
圖1為現(xiàn)有技術(shù)中基于經(jīng)緯線劃分方法生成的球體模型。由圖1可見,由于紋理密度不均勻,因此造成顯卡負(fù)載過大。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明的目的是提供一種在游戲場景中顯示天空球的方法和裝置,提高紋理密度均勻度,從而降低顯卡負(fù)載。
一種在游戲場景中顯示天空球的方法,該方法包括:
基于預(yù)定的游戲視野范圍確定天空球半徑,并建立頂點(diǎn)位于由該天空球半徑所確定的球面上的正二十面體模型;
對于所述正二十面體模型的每一個三角形執(zhí)行多次遞歸細(xì)分以形成球體模型,其中每次遞歸細(xì)分包括:在三角形的每條邊的中點(diǎn)處拆分,并將拆分點(diǎn)的平面坐標(biāo)映射到球面上;
針對球體模型執(zhí)行紋理貼圖以生成天空球,并在屏幕中透視投影展示所述天空球。
在一個實(shí)施方式中,所述多次遞歸細(xì)分為:四次遞歸細(xì)分。
在一個實(shí)施方式中,所述在三角形的每條邊的中點(diǎn)處拆分,并將拆分點(diǎn)的平面坐標(biāo)映射到球面上包括:
對于每個三角形,在每條邊的中點(diǎn)處拆分并計算中點(diǎn)的平面坐標(biāo),并將平面坐標(biāo)所表示的向量進(jìn)行單位化;
將所述向量乘以天空球半徑,將平面坐標(biāo)作為頂點(diǎn)映射到基于所述天空球半徑確定的球面上。
在一個實(shí)施方式中,針對球體模型執(zhí)行紋理貼圖以生成天空球包括:
針對球體模型執(zhí)行512×512分辨率的紋理貼圖以生成天空球。
一種在游戲場景中顯示天空球的裝置,該裝置包括:
模型建立模塊,用于基于預(yù)定的游戲視野范圍確定天空球半徑,并建立頂點(diǎn)位于由該天空球半徑所確定的球面上的正二十面體模型;
遞歸模塊,用于對于所述正二十面體模型的每一個三角形執(zhí)行多次遞歸細(xì)分以形成球體模型,其中每次遞歸細(xì)分包括:在三角形的每條邊的中點(diǎn)處拆分,并將拆分點(diǎn)的平面坐標(biāo)映射到球面上;
展示模塊,用于針對球體模型執(zhí)行紋理貼圖以生成天空球,并在屏幕中透視投影展示所述天空球。
在一個實(shí)施方式中,所述多次遞歸細(xì)分為:四次遞歸細(xì)分。
在一個實(shí)施方式中,遞歸模塊,用于對于每個三角形,在每條邊的中點(diǎn)處拆分并計算中點(diǎn)的平面坐標(biāo),并將平面坐標(biāo)所表示的向量進(jìn)行單位化;將所述向量乘以天空球半徑,將平面坐標(biāo)作為頂點(diǎn)映射到基于所述天空球半徑確定的球面上。
在一個實(shí)施方式中,展示模塊,用于針對球體模型執(zhí)行512×512分辨率的紋理貼圖以生成天空球。
從上述技術(shù)方案可以看出,在本發(fā)明實(shí)施方式中:基于預(yù)定的游戲視野范圍確定天空球半徑,并建立頂點(diǎn)位于由該天空球半徑所確定的球面上的正二十面體模型;對于所述正二十面體模型的每一個三角形執(zhí)行多次遞歸細(xì)分以形成球體模型,其中每次遞歸細(xì)分包括:在三角形的每條邊的中點(diǎn)處拆分,并將拆分點(diǎn)的平面坐標(biāo)映射到球面上;針對球體模型執(zhí)行紋理貼圖以生成天空球,并在屏幕中透視投影展示所述天空球??梢?,本發(fā)明實(shí)施方式基于正二十面體遞歸細(xì)分構(gòu)成球體模型,使之有均勻紋理密度,在紋理尺寸上節(jié)省更多的消耗,可以降低顯存空間。
附圖說明
以下附圖僅對本發(fā)明做示意性說明和解釋,并不限定本發(fā)明的范圍。
圖1為現(xiàn)有技術(shù)中經(jīng)緯線劃分法生成的球體模型示意圖。
圖2為根據(jù)本發(fā)明在游戲場景中顯示天空球的方法流程圖。
圖3為根據(jù)本發(fā)明正二十面體模型的示意圖。
圖4為根據(jù)本發(fā)明對三角形的遞歸細(xì)分示意圖。
圖5為根據(jù)本發(fā)明基于正二十面體遞歸劃拆分的球體模型示意圖。
圖6為根據(jù)本發(fā)明在游戲場景中顯示天空球的裝置結(jié)構(gòu)圖。
具體實(shí)施方式
為了對發(fā)明的技術(shù)特征、目的和效果有更加清楚的理解,現(xiàn)對照附圖說明本發(fā)明的具體實(shí)施方式,在各圖中相同的標(biāo)號表示相同的部分。
在本文中,“示意性”表示“充當(dāng)實(shí)例、例子或說明”,不應(yīng)將在本文中被描述為“示意性”的任何圖示、實(shí)施方式解釋為一種更優(yōu)選的或更具優(yōu)點(diǎn)的技術(shù)方案。
為使圖面簡潔,各圖中的只示意性地表示出了與本發(fā)明相關(guān)部分,而并不代表其作為產(chǎn)品的實(shí)際結(jié)構(gòu)。另外,以使圖面簡潔便于理解,在有些圖中具有相同結(jié)構(gòu)或功能的部件,僅示意性地繪示了其中的一個,或僅標(biāo)出了其中的一個。
在一些大型的3D游戲中,有幾個必不可少的元素,比如說天空和大地,這些元素的存在可以增加3D場景的真實(shí)感。天空其實(shí)就是一個很大的容器,把整個世界都罩在下面,大地就是一個平面,場景中所有的元素都顯示在二者所包圍的空間中。
三維天空的技術(shù)主要包括三種類型:一種是平面型天空(Sky Plane),僅用一個平面蓋在所有元素的頭頂。這種技術(shù)有點(diǎn)弱,很容易被識破,真實(shí)感也很低,有時還需要用霧來覆蓋遠(yuǎn)景以增加真實(shí)感,但是效果和技術(shù)含量依然很低。一種是天空穹廬(Sky Dome),有時也稱為天空球,即放到場景元素頭頂上的是一個曲面,通常都會為一個半球,這種技術(shù)的真實(shí)性和立體感強(qiáng);另外一種是天空盒子(Sky Box),即把天空做成一個立方體,所有的元素都罩在其下。
現(xiàn)有技術(shù)的天空球采用經(jīng)緯線劃分方法。然而,在經(jīng)緯線劃分方法中,在對應(yīng)紋理貼圖時,整個球面的紋理密度是不統(tǒng)一的。在南北極部分紋理密度過大,會有堆積現(xiàn)象,在赤道部分紋理密度過小,會有拉伸現(xiàn)象。
在本發(fā)明實(shí)施方式中,基于正二十面體遞歸細(xì)分構(gòu)成球體模型,使之有均勻紋理密度。
圖2為根據(jù)本發(fā)明在游戲場景中顯示天空球的方法流程圖。
如圖2所示,該方法包括:
步驟201:基于預(yù)定的游戲視野范圍確定天空球半徑,并建立頂點(diǎn)位于由該天空球半徑所確定的球面上的正二十面體模型。
在這里,首先基于預(yù)定的游戲視野范圍確定天空球半徑,而且可以建立頂點(diǎn)位于由該天空球半徑所確定的球面上的正二十面體模型。
圖3為根據(jù)本發(fā)明正二十面體模型的示意圖。
如圖3所示,正二十面體模型是由20個等邊三角形所組成的正多面體,共有12個頂點(diǎn),30條棱,20個面。
步驟202:對于正二十面體模型的每一個三角形執(zhí)行多次遞歸細(xì)分以形成球體模型,其中每次遞歸細(xì)分包括:在三角形的每條邊的中點(diǎn)處拆分,并將拆分點(diǎn)的平面坐標(biāo)映射到球面上。
在這里,對于對正二十面體模型中的每一個等邊三角形,在每條邊的中點(diǎn)之間拆分,最后把新生成的頂點(diǎn)坐標(biāo)所表示的向量進(jìn)行單位化,將此向量乘以球的半徑,將新生成的頂點(diǎn)坐標(biāo)映射球面上。
圖4為根據(jù)本發(fā)明對三角形的遞歸細(xì)分示意圖。
如圖4所示,以正二十面體模型中的一個三角形P0P1P2為例進(jìn)行說明,三角形P0P1P2各個頂點(diǎn)的坐標(biāo)分別為P0、P1和P2。該三角形P0P1P2具有三條等邊,分別為P0P1、P0P2和P1P2。
第一次遞歸細(xì)分包括:
首先,計算三角形P0P1P2的三條等邊的各自中點(diǎn)坐標(biāo)。具體地,計算等邊P0P1的中點(diǎn)坐標(biāo),假定中點(diǎn)為P01,則P01=(P0+P1)/2;計算等邊P0P2的中點(diǎn)坐標(biāo),假定中點(diǎn)為P20,則P20=(P0+P2)/2;計算等邊P1P2的中點(diǎn)坐標(biāo),假定中點(diǎn)為P12,則P12=(P1+P2)/2。
而且,三角形P0P1P2被拆分為四個三角形,分別為:三角形P0P01P20、三角形P1P01P12、三角形P2P20P12和三角形P01P20P12。
然后,將新生成的頂點(diǎn)坐標(biāo)P01、P20和P12所表示的向量進(jìn)行單位化,將此向量乘以球的半徑,將新生成的頂點(diǎn)坐標(biāo)映射球面上。
第二次遞歸過程包括:計算三角形P0P01P20的三條等邊的各自中點(diǎn)坐標(biāo),將新生成的頂點(diǎn)坐標(biāo)所表示的向量進(jìn)行單位化,將此向量乘以球的半徑,將新生成的頂點(diǎn)坐標(biāo)映射球面上;計算三角形P1P01P12的三條等邊的各自中點(diǎn)坐標(biāo),將新生成的頂點(diǎn)坐標(biāo)所表示的向量進(jìn)行單位化,將此向量乘以球的半徑,將新生成的頂點(diǎn)坐標(biāo)映射球面上;計算三角形P2P20P12的三條等邊的各自中點(diǎn)坐標(biāo),將新生成的頂點(diǎn)坐標(biāo)所表示的向量進(jìn)行單位化,將此向量乘以球的半徑,將新生成的頂點(diǎn)坐標(biāo)映射球面上;計算三角形P01P20P12的三條等邊的各自中點(diǎn)坐標(biāo),將新生成的頂點(diǎn)坐標(biāo)所表示的向量進(jìn)行單位化,將此向量乘以球的半徑,將新生成的頂點(diǎn)坐標(biāo)映射球面上。
而且,三角形P0P01P20、三角形P1P01P12、三角形P2P20P12和三角形P01P20P12中的每一個都被拆分為四個小三角形,從而一共構(gòu)成16個小三角形。
類似地,第三次遞歸過程包括,針對這16個小三角形中的每一個,分別計算三條邊的各自中點(diǎn)坐標(biāo)。將新生成的頂點(diǎn)坐標(biāo)所表示的向量進(jìn)行單位化,將此向量乘以球的半徑,將新生成的頂點(diǎn)坐標(biāo)映射球面上。16個小三角形每一個都被拆分為四個更小的三角形,從而構(gòu)成64個更小的三角形。
類似地,可以對這64個更小的三角形中的每一個分別進(jìn)行中點(diǎn)拆分以執(zhí)行多次遞歸。
申請人發(fā)現(xiàn),經(jīng)過四次遞歸之后,已經(jīng)可以形成良好的球體模型。
圖5為根據(jù)本發(fā)明基于正二十面體遞歸劃拆分的球體模型示意圖。該球體模型可以具有均勻紋理密度。在正二十面體模型上四次迭代遞歸拆分三角面,形成合適三角面數(shù)量的球體模型。使用該模型替代現(xiàn)有技術(shù)中的經(jīng)緯線劃分法生成的模型,原始模型需要1024*1024分辨率的紋理才能達(dá)到理想效果,替換后僅使用512*512分辨率的紋理即可達(dá)到同樣效果,節(jié)省了75%的顯存空間。
步驟203:針對球體模型執(zhí)行紋理貼圖以生成天空球,并在屏幕中透視投影展示天空球。
在這里,由于天空球是紋理密度均勻的,因此在紋理尺寸上節(jié)省更多的消耗。最后,在屏幕中透視投影展示天空球。
基于上述描述,本發(fā)明實(shí)施方式還提出了一種在游戲場景中顯示天空球的裝置。
圖6為根據(jù)本發(fā)明在游戲場景中顯示天空球的裝置結(jié)構(gòu)圖。
如圖6所示,該裝置600包括:
模型建立模塊601,用于基于預(yù)定的游戲視野范圍確定天空球半徑,并建立頂點(diǎn)位于由該天空球半徑所確定的球面上的正二十面體模型;
遞歸模塊602,用于對于所述正二十面體模型的每一個三角形執(zhí)行多次遞歸細(xì)分以形成球體模型,其中每次遞歸細(xì)分包括:在三角形的每條邊的中點(diǎn)處拆分,并將拆分點(diǎn)的平面坐標(biāo)映射到球面上;
展示模塊603,用于針對球體模型執(zhí)行紋理貼圖以生成天空球,并在屏幕中透視投影展示所述天空球。
在一個實(shí)施方式中,多次遞歸細(xì)分為:四次遞歸細(xì)分。
在一個實(shí)施方式中,遞歸模塊602,用于對于每個三角形,在每條邊的中點(diǎn)處拆分并計算中點(diǎn)的平面坐標(biāo),并將平面坐標(biāo)所表示的向量進(jìn)行單位化;將所述向量乘以天空球半徑,將平面坐標(biāo)作為頂點(diǎn)映射到基于所述天空球半徑確定的球面上。
在一個實(shí)施方式中,展示模塊603,用于針對球體模型執(zhí)行512×512分辨率的紋理貼圖以生成天空球。
綜上所述,在本發(fā)明實(shí)施方式中:基于預(yù)定的游戲視野范圍確定天空球半徑,并建立頂點(diǎn)位于由該天空球半徑所確定的球面上的正二十面體模型;對于所述正二十面體模型的每一個三角形執(zhí)行多次遞歸細(xì)分以形成球體模型,其中每次遞歸細(xì)分包括:在三角形的每條邊的中點(diǎn)處拆分,并將拆分點(diǎn)的平面坐標(biāo)映射到球面上;針對球體模型執(zhí)行紋理貼圖以生成天空球,并在屏幕中透視投影展示所述天空球??梢?,本發(fā)明實(shí)施方式基于正二十面體遞歸細(xì)分構(gòu)成球體模型,使之有均勻紋理密度,在紋理尺寸上節(jié)省更多的消耗,可以降低顯存空間。
在本文中,“一個”并不表示將本發(fā)明相關(guān)部分的數(shù)量限制為“僅此一個”,并且“一個”不表示排除本發(fā)明相關(guān)部分的數(shù)量“多于一個”的情形。
在本文中,“上”、“下”、“前”、“后”、“左”、“右”、“內(nèi)”、“外”等僅用于表示相關(guān)部分之間的相對位置關(guān)系,而非限定這些相關(guān)部分的絕對位置。
上文所列出的一系列的詳細(xì)說明僅僅是針對本發(fā)明的可行性實(shí)施方式的具體說明,而并非用以限制本發(fā)明的保護(hù)范圍,凡未脫離本發(fā)明技藝精神所作的等效實(shí)施方案或變更,如特征的組合、分割或重復(fù),均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。