两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種游戲地形道路生成方法和裝置的制作方法

文檔序號(hào):6368487閱讀:213來(lái)源:國(guó)知局
專(zhuān)利名稱(chēng):一種游戲地形道路生成方法和裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及3D游戲設(shè)計(jì)技術(shù)領(lǐng)域,尤其涉及一種游戲地形道路生成方法和裝置。
背景技術(shù)
為了使游戲表現(xiàn)的更加真實(shí),游戲中的場(chǎng)景需要與現(xiàn)實(shí)世界更加接近。道路場(chǎng)景在游戲中非常常見(jiàn),你時(shí)常能看到各種道路。但是這些路大多是鄉(xiāng)間小道,很少有現(xiàn)代的邊界明晰的道路的樣子 ,即使有,基本上也都是筆直的,很少有彎曲的道路,而且現(xiàn)實(shí)中一條彎曲的道路是很常見(jiàn)的。對(duì)于一些現(xiàn)代題材的游戲來(lái)說(shuō),實(shí)現(xiàn)一種能夠快速鋪設(shè)現(xiàn)代道路的方法,就顯的很重要了?,F(xiàn)在大多數(shù)的鋪路方式是對(duì)地形的渲染使用多紋理混合的方式,當(dāng)需要鋪路的時(shí)候,美術(shù)人員在地形編輯器中設(shè)置他想要繪制為道路的地形的紋理為道路的紋理,然后在道路與地形邊緣進(jìn)行alpha混合,使之自然的進(jìn)行過(guò)渡?,F(xiàn)有方法存在以下缺點(diǎn)(1)因?yàn)樵械母淖冑N圖紋理的鋪路方法完全由人為的控制,鋪設(shè)過(guò)程比較困難;(2)道路邊緣比較柔和,不能更加真實(shí)的表現(xiàn)現(xiàn)代道路界限分明的特點(diǎn);(3)對(duì)于道路的一些細(xì)節(jié),如道路的中線(瓊瑪卡若線),難以表現(xiàn)。

發(fā)明內(nèi)容
本發(fā)明的目的在于提出一種游戲地形道路生成方法和裝置,提供了一種在現(xiàn)代題材游戲中鋪設(shè)道路的解決方案,使美術(shù)人員能夠在地形編輯器中快速、方便的鋪設(shè)道路。為達(dá)此目的,本發(fā)明采用以下技術(shù)方案一種游戲地形道路生成方法,包括以下步驟A、輸入至少4個(gè)地形上的坐標(biāo)點(diǎn)作為三次樣條曲線的關(guān)鍵點(diǎn);B、對(duì)每?jī)蓚€(gè)相鄰的關(guān)鍵點(diǎn)進(jìn)行樣條插值,計(jì)算插值點(diǎn)的坐標(biāo);C、根據(jù)第i+1插值點(diǎn)和當(dāng)前第i插值點(diǎn)生成道路的邊界點(diǎn),根據(jù)邊界點(diǎn)生成道路頂點(diǎn),將道路頂點(diǎn)保存在頂點(diǎn)數(shù)組中并生成頂點(diǎn)索引數(shù)組;D、根據(jù)頂點(diǎn)數(shù)組和頂點(diǎn)索引數(shù)組生成道路并進(jìn)行渲染。步驟B中進(jìn)一步包括以下步驟BI、計(jì)算當(dāng)前關(guān)鍵點(diǎn)Pk與下一關(guān)鍵點(diǎn)Pk+1的直線距離D,則所述兩個(gè)關(guān)鍵點(diǎn)之間的插值次數(shù)RT = [2*D],插值比Rtl = I/RT ;B2、當(dāng)前插值次數(shù)為M時(shí),計(jì)算當(dāng)前插值比u = M*R0 ;B3、通過(guò)Cardinal三次樣條曲線函數(shù)計(jì)算當(dāng)前插值點(diǎn)的坐標(biāo)并保存,所述函數(shù)公式為P(u) = Ph (_su3+2su2_su)+Pk[ (2_s) U3+(s_3) u2+l]+Pk+1 [ (s_2) U3+(3_2s)u2+su]+Pk+2(su3-su3),其中S為曲線的張力系數(shù);B4、判斷當(dāng)前插值次數(shù)M是否小于RT ;若小于,將M值加I并返回步驟B2,否則進(jìn)入步驟B5 ;
B5、判斷當(dāng)前關(guān)鍵點(diǎn)Pk是否為最后一個(gè)關(guān)鍵點(diǎn)Pn ;若是則進(jìn)入步驟C,否則將M值復(fù)位為I并返回步驟BI。步驟C中,進(jìn)一步包括以下步驟Cl、第i+1個(gè)插值點(diǎn)減去當(dāng)前第i個(gè)插值點(diǎn),得到向量L ;C2、令向量L的Y坐標(biāo)為0,得到向量L在XZ平面內(nèi)的投影向量Lxz,計(jì)算Lxz的在XZ平面內(nèi)的垂直向量LXZ1,對(duì)所述垂直向量LXZ1進(jìn)行向量標(biāo)準(zhǔn)化后乘以預(yù)設(shè)的道路寬度d得到向量L’ ;C3、令當(dāng)前第i個(gè)插值點(diǎn)的Y坐標(biāo)為0,加減向量L’,得到兩個(gè)在XZ平面內(nèi)的道路邊界點(diǎn);C4、判斷當(dāng)前插值點(diǎn)是否為第一個(gè)插值點(diǎn);若是,則進(jìn)入步驟C6,否則進(jìn)入步驟 C5 ;C5、根據(jù)邊界點(diǎn)生成道路頂點(diǎn),將道路頂點(diǎn)保存在頂點(diǎn)數(shù)組并生成頂點(diǎn)索引數(shù)組。C6、保存當(dāng)前采樣點(diǎn)產(chǎn)生的兩個(gè)邊界點(diǎn)。步驟C5中,進(jìn)一步包括以下步驟C501、讀取當(dāng)前生成的兩個(gè)邊界點(diǎn)和上一次生成的兩個(gè)邊界點(diǎn)所包圍的矩形區(qū)域中所有點(diǎn)的坐標(biāo);C502、取所有點(diǎn)的坐標(biāo)中X的最小值和最大值以及Z的最小值和最大值,并以X的最小值和Z的最小值作為初始的當(dāng)前坐標(biāo);C503、根據(jù)當(dāng)前坐標(biāo)的X和Z判斷頂點(diǎn)數(shù)組中是否包含具有相同X和Z坐標(biāo)的頂點(diǎn);若包含,則進(jìn)入步驟C504,否則進(jìn)入步驟C506 ;C504、判斷當(dāng)前坐標(biāo)的Z值是否為Z的最大值;若是,則將X值加1,Z值復(fù)位為最小值并進(jìn)入步驟C505,否則將Z值加I并返回步驟C503 ;C505、判斷當(dāng)前坐標(biāo)的X值是否為X的最大值;若是,則進(jìn)入步驟C6,否則返回步驟 C503 ;C506、根據(jù)X和Z判斷頂點(diǎn)數(shù)組中是否包含與當(dāng)前坐標(biāo)周?chē)?個(gè)點(diǎn)中的任意一點(diǎn)具有相同X和Z坐標(biāo)的頂點(diǎn);若包含,則從頂點(diǎn)數(shù)組中讀取該頂點(diǎn)的Y坐標(biāo)值作為當(dāng)前坐標(biāo)的Y值并進(jìn)入步驟C508,否則進(jìn)入步驟C507 ;C507、從地形數(shù)據(jù)中讀取與當(dāng)前坐標(biāo)具有相同X值和Z值的點(diǎn)的Y坐標(biāo)值作為當(dāng)前坐標(biāo)的Y值;C508、當(dāng)前坐標(biāo)減去當(dāng)前第i插值點(diǎn)得到向量V,計(jì)算當(dāng)前坐標(biāo)到第i+1插值點(diǎn)和當(dāng)前第i插值點(diǎn)之間連線的垂直距離t ;C509、向量L與向量V進(jìn)行叉乘,判斷Y值是否為正;若為正,則計(jì)算貼圖坐標(biāo)V =(道路寬度d-垂直距離t)/道路寬度d*2,若為負(fù),則計(jì)算貼圖坐標(biāo)V =(道路寬度d+垂直距離t) /道路寬度d*2 ;C510、計(jì)算當(dāng)前坐標(biāo)周?chē)?個(gè)點(diǎn)在向量L上的投影長(zhǎng)度tl,貼圖坐標(biāo)U = tl*R,其中R為預(yù)設(shè)的貼圖比例;C511、保存當(dāng)前坐標(biāo)至頂點(diǎn)數(shù)組,生成頂點(diǎn)索引數(shù)組,保存貼圖坐標(biāo)U和V并返回步驟C504。所述游戲地形道路生成方法還包括,步驟C結(jié)束后判斷當(dāng)前生成的兩個(gè)邊界點(diǎn)的向量與上次生成的兩個(gè)邊界點(diǎn)的向量是否交叉;若交叉,則進(jìn)入步驟D,否則返回步驟C ;所述判斷進(jìn)一步包括以下步驟當(dāng)前生成的兩個(gè)邊界點(diǎn)與上次生成的兩個(gè)邊界點(diǎn)中,分別將位于道路同側(cè)的邊界點(diǎn)相減,得到兩個(gè)邊界向量;對(duì)兩個(gè)邊界向量分別進(jìn)行向量標(biāo)準(zhǔn)化操作后進(jìn)行點(diǎn)乘;判斷點(diǎn)乘結(jié)果是否為負(fù)值;若為負(fù)值,則交叉,若為正值,則不交叉。一種游戲地形道路生成裝置,包括輸入模塊,插值模塊,處理模塊和道路生成模塊;其中,輸入模塊,用于輸入至少4個(gè)地形上的坐標(biāo)點(diǎn)作為三次樣條曲線的關(guān)鍵點(diǎn);插值模塊,對(duì)每4個(gè)相鄰的關(guān)鍵點(diǎn)進(jìn)行樣條插值,計(jì)算插值點(diǎn)的坐標(biāo);處理模塊,用于根據(jù)第i + 1插值點(diǎn)和當(dāng)前第i插值點(diǎn)生成道路的邊界點(diǎn),根據(jù)邊界點(diǎn)生成道路頂點(diǎn),將頂點(diǎn)保存在頂點(diǎn)數(shù)組中并生成頂點(diǎn)索引數(shù)組;道路生成模塊,用于根據(jù)頂點(diǎn)數(shù)組和頂點(diǎn)索引數(shù)組生成道路并進(jìn)行渲染。在所述處理模塊和道路生成模塊之間還包括判斷模塊,所述判斷模塊用于判斷處理模塊當(dāng)前生成的兩個(gè)邊界點(diǎn)的向量與上次生成的兩個(gè)邊界點(diǎn)的向量是否交叉;若交叉,則所述道路生成模塊根據(jù)頂點(diǎn)數(shù)組和頂點(diǎn)索引數(shù)組生成道路并進(jìn)行渲染;否則,所述處理模塊將根據(jù)下一個(gè)插值點(diǎn)繼續(xù)生成道路邊界點(diǎn)和頂點(diǎn)。
采用本發(fā)明的技術(shù)方案,提供了一種在現(xiàn)代題材游戲中鋪設(shè)道路的解決方案,使美術(shù)人員能夠在地形編輯器中快速、方便的鋪設(shè)道路,并且可以充分的表現(xiàn)現(xiàn)代道路的特點(diǎn)和細(xì)節(jié),使游戲中的虛擬世界更加逼真。


圖I是本發(fā)明具體實(shí)施方式
提供的游戲地形道路生成方法的流程示意圖。圖2是本發(fā)明具體實(shí)施方式
中根據(jù)輸入的關(guān)鍵點(diǎn)進(jìn)行插值的流程示意圖。圖3是本發(fā)明具體實(shí)施方式
中根據(jù)插值點(diǎn)生成道路邊界點(diǎn)的流程示意圖。圖4是本發(fā)明具體實(shí)施方式
中生成頂點(diǎn)數(shù)組和頂點(diǎn)索引數(shù)組的流程示意圖。圖5是本發(fā)明具體實(shí)施方式
中判斷邊界向量是否交叉的流程示意圖。圖6是本發(fā)明具體實(shí)施方式
提供的游戲地形道路生成裝置的結(jié)構(gòu)示意圖。
具體實(shí)施例方式下面結(jié)合附圖并通過(guò)具體實(shí)施方式
來(lái)進(jìn)一步說(shuō)明本發(fā)明的技術(shù)方案。圖I是本發(fā)明具體實(shí)施方式
提供的游戲地形道路生成方法的流程示意圖。如圖I所示,該方法包括步驟S101,輸入至少4個(gè)地形上的坐標(biāo)點(diǎn)作為三次樣條曲線的關(guān)鍵點(diǎn)。在地形編輯器上通過(guò)鼠標(biāo)點(diǎn)選的方式輸入至少4個(gè)地形上的坐標(biāo)點(diǎn)作為三次樣條曲線的關(guān)鍵點(diǎn)。所述關(guān)鍵點(diǎn)的點(diǎn)選,需要依據(jù)地形設(shè)計(jì)中出現(xiàn)道路的位置和方向在三維坐標(biāo)系下選取,選取的關(guān)鍵點(diǎn)為具有X、Y、Z坐標(biāo)的三維坐標(biāo)點(diǎn)。步驟S102,對(duì)每?jī)蓚€(gè)相鄰的關(guān)鍵點(diǎn)進(jìn)行樣條插值,計(jì)算插值點(diǎn)的坐標(biāo)。由于需要使用三次樣條曲線函數(shù)進(jìn)行插值計(jì)算,所以每次插值計(jì)算需要代入4個(gè)關(guān)鍵點(diǎn)的坐標(biāo)值來(lái)計(jì)算插值點(diǎn)坐標(biāo),分別為當(dāng)前關(guān)鍵點(diǎn)pk、與其相鄰的上一個(gè)關(guān)鍵點(diǎn)Plri和與其相鄰的下兩個(gè)關(guān)鍵點(diǎn)Pk+1、Pk+2。如圖2所示,所述插值過(guò)程進(jìn)一步包括以下步驟步驟S201,計(jì)算當(dāng)前關(guān)鍵點(diǎn)Pk與下一關(guān)鍵點(diǎn)Pk+1的直線距離D,則所述兩個(gè)關(guān)鍵點(diǎn)之間的插值次數(shù)RT= [2*D],插值比Rtl = 1/RT。依據(jù)關(guān)鍵點(diǎn)輸入的順序,從第一個(gè)關(guān)鍵點(diǎn)開(kāi)始,通過(guò)坐標(biāo)計(jì)算當(dāng)前關(guān)鍵點(diǎn)與下一個(gè)關(guān)鍵點(diǎn)之間的直線距離D,則兩個(gè)關(guān)鍵點(diǎn)之間的插值次數(shù)RT = [2*D],即將所述直線距離乘以2后取整,作為插值次數(shù),插值比Rtl = 1/RT。步驟S202,當(dāng)前插值次數(shù)為M時(shí),計(jì)算當(dāng)前插值比u = M*R。。步驟S203,通過(guò)Cardinal三次樣條曲線函數(shù)計(jì)算當(dāng)前插值點(diǎn)的坐標(biāo)并保存,所述函數(shù)公式為P(U) = Ph (_su3+2su2_su)+Pk[ (2_s) U3+(s_3) u2+l]+Pk+1 [ (s_2) U3+(3_2s)u2+su]+Pk+2(SU3-SU3);其中Pk-pPpPk+i和Pk+2為相鄰的四個(gè)關(guān)鍵點(diǎn);s為曲線的張力系數(shù),S控制Cardinal樣條與輸入的關(guān)鍵點(diǎn)之間的松緊程度。步驟S204,判斷當(dāng)前插值次數(shù)M是否小于RT ;若小于,將M值加I并返回步驟S202,否則進(jìn)入步驟S205 ;步驟S205,判斷當(dāng)前關(guān)鍵點(diǎn)Pk是否為最后一個(gè)關(guān)鍵點(diǎn)Pn ;若是則進(jìn)入步驟S103,否則將M值復(fù)位為I并返回步驟S201。上述步驟S201至S205完成了對(duì)每?jī)蓚€(gè)相鄰的關(guān)鍵點(diǎn)通過(guò)Cardinal三次樣條曲線進(jìn)行樣條插值并得到插值點(diǎn)坐標(biāo)的工作。步驟S103,根據(jù)第i+1個(gè)插值點(diǎn)和當(dāng)前第i個(gè)插值點(diǎn)生成道路的邊界點(diǎn),i為大于等于I的正整數(shù)且初始值為1,根據(jù)邊界點(diǎn)生成道路頂點(diǎn),將頂點(diǎn)保存在頂點(diǎn)數(shù)組,并生成頂點(diǎn)索引數(shù)組。利用獲得的所有插值點(diǎn),來(lái)生成道路的邊界點(diǎn),再根據(jù)邊界點(diǎn)生成頂點(diǎn)保存在頂點(diǎn)數(shù)組中,進(jìn)而生成頂點(diǎn)索引數(shù)組,具體步驟如圖3所示,包括步驟S301,第i+1個(gè)插值點(diǎn)減去第i個(gè)插值點(diǎn),得到具有X、Y、Z坐標(biāo)的三維向量L ;步驟S302,令向量L的Y坐標(biāo)為0,得到向量L在XZ平面內(nèi)的投影向量Lxz ;計(jì)算Lxz在XZ平面內(nèi)的垂直向量Lxz I,現(xiàn)已知投影向量Lxz的三維坐標(biāo)為U,ZlJ,令Lxz在XZ平面內(nèi)的垂直向量Lxz丄的X坐標(biāo)Xljiz ± = ZLxz, Z坐標(biāo)Zuz ± = -Xlxz,則得到垂直向量Lxz丄的三維坐標(biāo)為(ZUz,0,-XUz)。再對(duì)所述垂直向量Lxzi進(jìn)行向量標(biāo)準(zhǔn)化后乘以預(yù)設(shè)的道路寬度d得到向量L’ ;步驟S303,當(dāng)前插值點(diǎn)加減向量L’,則分別得到兩個(gè)道路網(wǎng)格邊界點(diǎn);當(dāng)前插值點(diǎn)的坐標(biāo)加上向量L’,相當(dāng)于當(dāng)前插值點(diǎn)在XZ平面內(nèi)沿向量L’的方向進(jìn)行位移,位移的距離為向量L’的模;當(dāng)前插值點(diǎn)的坐標(biāo)減去向量L’,相當(dāng)于當(dāng)前插值點(diǎn)在XZ平面內(nèi)沿向 量L’的相反方向進(jìn)行位移,位移的距離為向量L’的模;此時(shí)得到在XZ平面內(nèi)分別位于道路兩側(cè)的邊界點(diǎn)各一個(gè)。步驟S304,判斷當(dāng)前插值點(diǎn)是否為第一個(gè)插值點(diǎn);若是,則進(jìn)入步驟S306,否則進(jìn)入步驟S305。即判斷i值是否為1,此時(shí)第一個(gè)插值點(diǎn)只生成了兩個(gè)邊界點(diǎn),而每次進(jìn)入步驟S305生成頂點(diǎn)時(shí)需要四個(gè)邊界點(diǎn),所以此時(shí)需要跳過(guò)步驟S305并保存這最先得到兩個(gè)邊界點(diǎn)。
步驟S305,根據(jù)邊界點(diǎn)生成道路頂點(diǎn),頂點(diǎn)保存在頂點(diǎn)數(shù)組并生成頂點(diǎn)索引數(shù)組;步驟S306,保存當(dāng)前插值點(diǎn)產(chǎn)生的兩個(gè)邊界點(diǎn)。其中步驟S305中根據(jù)邊界點(diǎn)生成道路頂點(diǎn),將頂點(diǎn)保存在頂點(diǎn)數(shù)組并生成頂點(diǎn)索引數(shù)組的過(guò)程如圖4所示, 進(jìn)一步包括以下步驟步驟S305a,讀取當(dāng)前生成的兩個(gè)邊界點(diǎn)和上一次生成的兩個(gè)邊界點(diǎn)所包圍的矩形區(qū)域中所有點(diǎn)的坐標(biāo)。前后兩次生成的四個(gè)邊界點(diǎn),在XZ平面內(nèi)合圍成一個(gè)矩形區(qū)域,讀取該矩形區(qū)域內(nèi)所有點(diǎn)的坐標(biāo)。步驟S305b,取所有點(diǎn)的坐標(biāo)中X的最小值Xmin和最大值Xmax以及Z的最小值Zmin和最大值Zmax,并以Xmin和Zmin作為初始的當(dāng)前坐標(biāo),則當(dāng)前坐標(biāo)的初始值為(Xmin,0,Zmin)。步驟S305c,根據(jù)當(dāng)前坐標(biāo)的X和Z判斷頂點(diǎn)數(shù)組中是否包含具有相同X和Z坐標(biāo)的頂點(diǎn);若包含,則進(jìn)入步驟S305d,否則進(jìn)入步驟S305f。步驟S305d,判斷當(dāng)前坐標(biāo)的Z值是否為Z的最大值Zmax ;若是,則將X值加1,Z值復(fù)位為最小值Zmin并進(jìn)入步驟S305e,否則將Z值加I并返回步驟S305C。步驟S305e,判斷當(dāng)前坐標(biāo)的X值是否為X的最大值;若是,則進(jìn)入步驟S306,否則返回步驟S305c。上述步驟S305c至S305e通過(guò)X值和Z值的分別遞增,達(dá)到遍歷所述矩形區(qū)域內(nèi)所有點(diǎn)的目的。步驟S305f,根據(jù)X和Z判斷頂點(diǎn)數(shù)組中是否包含與當(dāng)前坐標(biāo)周?chē)?個(gè)點(diǎn)中的任意一點(diǎn)具有相同X和Z坐標(biāo)的頂點(diǎn);若包含,則從頂點(diǎn)數(shù)組中讀取該頂點(diǎn)的Y坐標(biāo)值作為當(dāng)前坐標(biāo)的Y值并進(jìn)入步驟S305h,否則進(jìn)入步驟S305g。步驟S305g,從地形數(shù)據(jù)中讀取與當(dāng)前坐標(biāo)具有相同X值和Z值的點(diǎn)的Y坐標(biāo)值作為當(dāng)前坐標(biāo)的Y值;獲取的Y值如果不為0,則表示該頂點(diǎn)在實(shí)際地形中具有地形高度,該段道路在實(shí)際游戲地形中不是平坦路段,會(huì)出現(xiàn)一定坡度或者坑洼不平的情形。。步驟S305h,當(dāng)前坐標(biāo)減去當(dāng)前第i插值點(diǎn)得到向量V,計(jì)算當(dāng)前坐標(biāo)到第i+1插值點(diǎn)和當(dāng)前第i插值點(diǎn)之間連線的垂直距離t。步驟S305i,向量L與向量V進(jìn)行叉乘,判斷Y值是否為正;若為正,則計(jì)算貼圖坐標(biāo)V=(道路寬度d-垂直距離t)/道路寬度d*2,若為負(fù),則計(jì)算貼圖坐標(biāo)V =(道路寬度d+垂直距離t)/道路寬度d*2。步驟S305j,計(jì)算當(dāng)前坐標(biāo)周?chē)?個(gè)點(diǎn)在向量L上的投影長(zhǎng)度tl,則貼圖坐標(biāo)U=t i*R,其中R為預(yù)設(shè)的貼圖比例。所述投影長(zhǎng)度tl為當(dāng)前坐標(biāo)周?chē)?個(gè)點(diǎn)在向量L上的8個(gè)投影點(diǎn)連接成的線段的長(zhǎng)度。步驟S305j,保存當(dāng)前坐標(biāo)至頂點(diǎn)數(shù)組,生成頂點(diǎn)索引數(shù)組,保存貼圖坐標(biāo)U和V并返回步驟S305f。將當(dāng)前坐標(biāo)作為道路頂點(diǎn)的坐標(biāo)信息保存在頂點(diǎn)數(shù)組中,用于后面的道路生成。頂點(diǎn)數(shù)組為一個(gè)保存VERTEX的vector類(lèi)型的容器,并記錄這些頂點(diǎn)的索引。以各個(gè)頂點(diǎn)的序號(hào)作為相應(yīng)頂點(diǎn)的索引,索引為簡(jiǎn)單的int類(lèi)型,將索引添加到道路的頂點(diǎn)索引數(shù)組。同時(shí)保存貼圖坐標(biāo)U和V,用于確定后期的紋理貼圖在模型上的位置,并返回步驟S305fo所有的圖象文件都是二維的一個(gè)平面。水平方向是U,垂直方向是V,通過(guò)這個(gè)平面的、二維的UV坐標(biāo)系,我們可以定位圖象上的任意一個(gè)象素。把這個(gè)二維的平面貼到三維的多邊形模型表面時(shí),多邊形為了貼圖就額外引進(jìn)了一個(gè)UV坐標(biāo),以便把多邊形的頂點(diǎn)和圖象文件上的象素對(duì)應(yīng)起來(lái),這樣才能在多邊形表面上定位紋理貼圖。所以多邊形的頂點(diǎn)除了具有三維的空間坐標(biāo)外。還具有二維的UV坐標(biāo)。對(duì)于紋理貼圖而言,一張貼圖的U和V坐標(biāo)的數(shù)值范圍都是O到I,而不管他的實(shí)際分辨率是多少,程序會(huì)自動(dòng)把UV紋理坐標(biāo)換算成貼圖的象素坐標(biāo)。由于在上述過(guò)程中明確計(jì)算出了道路頂點(diǎn)的三維坐標(biāo)并保存在頂點(diǎn)數(shù)組中,從而使生成的道路具有明晰的邊界,與采用道路與地形邊緣進(jìn)行alpha混合進(jìn)行過(guò)渡的方式相t匕,鋪設(shè)的道路邊界很清晰,更具真實(shí)感。步驟S104,根據(jù)頂點(diǎn)數(shù)組和頂點(diǎn)索引數(shù)組生成道路并進(jìn)行渲染。頂點(diǎn)數(shù)組就是將原來(lái)由一系列的Vertex指定的頂點(diǎn)放在一個(gè)數(shù)組中(其意思就是頂點(diǎn)數(shù)據(jù)組成的數(shù)組)由頂點(diǎn)數(shù)組處理函數(shù)一次性指定。事實(shí)上,頂點(diǎn)數(shù)據(jù)中還包含著其他系列的信息,比如用于表面發(fā)現(xiàn)的貼圖坐標(biāo)U、V,RGBA顏色,輔助顏色等。頂點(diǎn)索引數(shù)組由各個(gè)頂點(diǎn)的索引組成,其中的每個(gè)索引指向相對(duì)應(yīng)的頂點(diǎn)數(shù)據(jù)。此外,生成一段道路后,還可以判斷此段道路是否在場(chǎng)景可見(jiàn)范圍內(nèi),如果在可見(jiàn)范圍內(nèi),再進(jìn)行渲染。上述游戲地形生成道路的方法,可以進(jìn)一步包括步驟C結(jié)束后判斷當(dāng)前生成的兩個(gè)邊界點(diǎn)的向量與上次生成的兩個(gè)邊界點(diǎn)的向量是否交叉。該步驟的主要目的在于判斷是否需要對(duì)道路進(jìn)行分段。如果交叉,表明道路的方向會(huì)產(chǎn)生變化,此時(shí)根據(jù)已生成的邊界點(diǎn)以及計(jì)算出的頂點(diǎn)數(shù)據(jù),生成一段道路。再根據(jù)后面的新生成的邊界點(diǎn)繼續(xù)計(jì)算下一段道路的頂點(diǎn)數(shù)據(jù),直至下一次所述的兩個(gè)向量發(fā)生交叉。判斷所述兩個(gè)向量是否交叉時(shí),如圖5所示,進(jìn)一步包括以下步驟步驟S501,當(dāng)前生成的兩個(gè)邊界點(diǎn)與上次生成的兩個(gè)邊界點(diǎn)中,分別將位于道路同側(cè)的邊界點(diǎn)相減,得到兩個(gè)邊界向量;凡是用插值點(diǎn)減去向量L’而得到的邊界點(diǎn)視為同處于道路的一側(cè),用插值點(diǎn)加上向量L’而得到的邊界點(diǎn)處于道路的另一側(cè),此時(shí)共4個(gè)邊界點(diǎn),將位于道路同側(cè)的兩個(gè)點(diǎn)分別相減,得到兩個(gè)邊界向量。步驟S502,對(duì)兩個(gè)邊界向量分別進(jìn)行向量標(biāo)準(zhǔn)化操作后,進(jìn)行點(diǎn)乘;步驟S503,判斷點(diǎn)乘結(jié)果是否為負(fù)值;若為負(fù)值,則交叉,進(jìn)入步驟D,表明道路在此分段,先生成前一段道路;若為正值,則不交叉,返回步驟C,表明道路在此還未分段,可以繼續(xù)生成后面的邊界點(diǎn)并計(jì)算頂點(diǎn)數(shù)據(jù)。圖6是本發(fā)明具體實(shí)施方式
提供的游戲地形道路生成裝置結(jié)構(gòu)示意圖。如圖6所示,該裝置包括輸入模塊601,插值模塊602,處理模塊603,和道路生成模塊604。所述輸入模塊601,用于輸入至少4個(gè)地形上的坐標(biāo)點(diǎn)作為三次樣條曲線的關(guān)鍵點(diǎn)。所述插值模塊602,用于對(duì)每?jī)蓚€(gè)相鄰的關(guān)鍵點(diǎn)進(jìn)行樣條插值,計(jì)算插值點(diǎn)的坐標(biāo)。所述處理模塊603,用于處理模塊,用于根據(jù)第i+1插值點(diǎn)和當(dāng)前第i插值點(diǎn)生成道路的邊界點(diǎn),根據(jù)邊界點(diǎn)生成道路頂點(diǎn),將頂點(diǎn)保存在頂點(diǎn)數(shù)組中并生成頂點(diǎn)索引數(shù)組。
、
所述道路生成模塊604,用于根據(jù)頂點(diǎn)數(shù)組和頂點(diǎn)索引數(shù)組生成道路并進(jìn)行渲染。所述游戲地形道路生成裝置,在所述處理模塊和道路生成模塊之間還可以包括判斷模塊,所述判斷模塊用于判斷處理模塊當(dāng)前生成的兩個(gè)邊界點(diǎn)的向量與上次生成的兩個(gè)邊界點(diǎn)的向量是否交叉;若交叉,則所述道路生成模塊根據(jù)頂點(diǎn)數(shù)組和頂點(diǎn)索引數(shù)組生成道路并進(jìn)行渲染;否則,所述處理模塊將根據(jù)下一個(gè)插值點(diǎn)繼續(xù)生成道路邊界點(diǎn)和頂點(diǎn)。采用本發(fā)明的技術(shù)方案,提供了一種在現(xiàn)代題材游戲中鋪設(shè)道路的解決方案,使美術(shù)人員能夠在地形編輯器中快速、方便的鋪設(shè)道路,并且可以充分的表現(xiàn)現(xiàn)代道路的特點(diǎn)和細(xì)節(jié),使游戲中的虛擬世界更加逼真。 以上所述,僅為本發(fā)明較佳的具體實(shí)施方式
,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉該技術(shù)的人在本發(fā)明所揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1.一種游戲地形道路生成方法,其特征在于,包括以下步驟 A、輸入至少4個(gè)地形上的坐標(biāo)點(diǎn)作為三次樣條曲線的關(guān)鍵點(diǎn); B、對(duì)每?jī)蓚€(gè)相鄰的關(guān)鍵點(diǎn)進(jìn)行樣條插值,計(jì)算插值點(diǎn)的坐標(biāo); C、根據(jù)第i+Ι插值點(diǎn)和當(dāng)前第i插值點(diǎn)生成道路的邊界點(diǎn),根據(jù)邊界點(diǎn)生成道路頂點(diǎn),將道路頂點(diǎn)保存在頂點(diǎn)數(shù)組中并生成頂點(diǎn)索引數(shù)組; D、根據(jù)頂點(diǎn)數(shù)組和頂點(diǎn)索引數(shù)組生成道路并進(jìn)行渲染。
2.根據(jù)權(quán)利要求I所述的游戲地形道路生成方法,其特征在干,步驟B中進(jìn)ー步包括以下步驟 BI、計(jì)算當(dāng)前關(guān)鍵點(diǎn)Pk與下一關(guān)鍵點(diǎn)Pk+1的直線距離D,則所述兩個(gè)關(guān)鍵點(diǎn)之間的插值次數(shù) RT = [2*D],插值比 R0 = I/RT ; B2、當(dāng)前插值次數(shù)為M時(shí),計(jì)算當(dāng)前插值比u = M*R0 ; B3、通過(guò)Cardinal三次樣條曲線函數(shù)計(jì)算當(dāng)前插值點(diǎn)的坐標(biāo)并保存,所述函數(shù)公式為P (u) = Pk_1 (_su3+2su2_su) +Pk[ (2_s) u3+ (s_3) u2 +1] +Pk+1 [ (s_2) u3+ (3_2s)u2+su]+pk+2(su3-su3),其中S為曲線的張カ系數(shù); B4、判斷當(dāng)前插值次數(shù)M是否小于RT ;若小于,將M值加I并返回步驟B2,否則進(jìn)入步驟B5 ; B5、判斷當(dāng)前關(guān)鍵點(diǎn)Pk是否為最后ー個(gè)關(guān)鍵點(diǎn)Pn ;若是則進(jìn)入步驟C,否則將M值復(fù)位為I并返回步驟BI。
3.根據(jù)權(quán)利要求I或2所述的游戲地形道路生成方法,其特征在于,步驟C中,進(jìn)ー步包括以下步驟 Cl、第i+Ι個(gè)插值點(diǎn)減去當(dāng)前第i個(gè)插值點(diǎn),得到向量L ; C2、令向量L的Y坐標(biāo)為O,得到向量L在XZ平面內(nèi)的投影向量Lxz,計(jì)算Lxz的在XZ平面內(nèi)的垂直向量Lxzi,對(duì)所述垂直向量Lxzi進(jìn)行向量標(biāo)準(zhǔn)化后乘以預(yù)設(shè)的道路寬度d得到向量じ; C3、令當(dāng)前第i個(gè)插值點(diǎn)的Y坐標(biāo)為O,加減向量L’,得到兩個(gè)在XZ平面內(nèi)的道路邊界點(diǎn); C4、判斷當(dāng)前插值點(diǎn)是否為第一個(gè)插值點(diǎn);若是,則進(jìn)入步驟C6,否則進(jìn)入步驟C5 ; C5、根據(jù)邊界點(diǎn)生成道路頂點(diǎn),將道路頂點(diǎn)保存在頂點(diǎn)數(shù)組并生成頂點(diǎn)索引數(shù)組。
C6、保存當(dāng)前采樣點(diǎn)產(chǎn)生的兩個(gè)邊界點(diǎn)。
4.根據(jù)權(quán)利要求3所述的游戲地形道路生成方法,其特征在干,步驟C5中,進(jìn)ー步包括以下步驟 C501、讀取當(dāng)前生成的兩個(gè)邊界點(diǎn)和上一次生成的兩個(gè)邊界點(diǎn)所包圍的矩形區(qū)域中所有點(diǎn)的坐標(biāo); C502、取所有點(diǎn)的坐標(biāo)中X的最小值和最大值以及Z的最小值和最大值,并以X的最小值和Z的最小值作為初始的當(dāng)前坐標(biāo); C503、根據(jù)當(dāng)前坐標(biāo)的X和Z判斷頂點(diǎn)數(shù)組中是否包含具有相同X和Z坐標(biāo)的頂點(diǎn);若包含,則進(jìn)入步驟C504,否則進(jìn)入步驟C506 ; C504、判斷當(dāng)前坐標(biāo)的Z值是否為Z的最大值;若是,則將X值加1,Z值復(fù)位為最小值并進(jìn)入步驟C505,否則將Z值加I并返回步驟C503 ;C505、判斷當(dāng)前坐標(biāo)的X值是否為X的最大值;若是,則進(jìn)入步驟C6,否則返回步驟C503 ; C506、根據(jù)X和Z判斷頂點(diǎn)數(shù)組中是否包含與當(dāng)前坐標(biāo)周?chē)?個(gè)點(diǎn)中的任意一點(diǎn)具有相同X和Z坐標(biāo)的頂點(diǎn);若包含,則從頂點(diǎn)數(shù)組中讀取該頂點(diǎn)的Y坐標(biāo)值作為當(dāng)前坐標(biāo)的Y值并進(jìn)入步驟C508,否則進(jìn)入步驟C507 ; C507、從地形數(shù)據(jù)中讀取與當(dāng)前坐標(biāo)具有相同X值和Z值的點(diǎn)的Y坐標(biāo)值作為當(dāng)前坐標(biāo)的Y值; C508、當(dāng)前坐標(biāo)減去當(dāng)前第i插值點(diǎn)得到向量V,計(jì)算當(dāng)前坐標(biāo)到第i+Ι插值點(diǎn)和當(dāng)前第i插值點(diǎn)之間連線的垂直距離t ; C509、向量L與向量V進(jìn)行叉乘,判斷Y值是否為正;若為正,則計(jì)算貼圖坐標(biāo)V=(道路寬度d-垂直距離t)/道路寬度d*2,若為負(fù),則計(jì)算貼圖坐標(biāo)V =(道路寬度d+垂直距離t)/道路寬度d*2 ; C510、計(jì)算當(dāng)前坐標(biāo)周?chē)?個(gè)點(diǎn)在向量L上的投影長(zhǎng)度tl,貼圖坐標(biāo)U = tl*R,其中R為預(yù)設(shè)的貼圖比例; C511、保存當(dāng)前坐標(biāo)至頂點(diǎn)數(shù)組,生成頂點(diǎn)索引數(shù)組,保存貼圖坐標(biāo)U和V并返回步驟C504。
5.根據(jù)權(quán)利要求I或2所述的游戲地形道路生成方法,其特征在于,所述方法還包括,步驟C結(jié)束后判斷當(dāng)前生成的兩個(gè)邊界點(diǎn)的向量與上次生成的兩個(gè)邊界點(diǎn)的向量是否交叉;若交叉,則進(jìn)入步驟D,否則返回步驟C ;所述判斷進(jìn)ー步包括以下步驟 當(dāng)前生成的兩個(gè)邊界點(diǎn)與上次生成的兩個(gè)邊界點(diǎn)中,分別將位于道路同側(cè)的邊界點(diǎn)相減,得到兩個(gè)邊界向量; 對(duì)兩個(gè)邊界向量分別進(jìn)行向量標(biāo)準(zhǔn)化操作后進(jìn)行點(diǎn)乘; 判斷點(diǎn)乘結(jié)果是否為負(fù)值;若為負(fù)值,則交叉,若為正值,則不交叉。
6.根據(jù)權(quán)利要求4所述的游戲地形道路生成方法,其特征在于,所述方法還包括,步驟C結(jié)束后判斷當(dāng)前生成的兩個(gè)邊界點(diǎn)的向量與上次生成的兩個(gè)邊界點(diǎn)的向量是否交叉;若交叉,則進(jìn)入步驟D,否則返回步驟C ;所述判斷進(jìn)ー步包括以下步驟 當(dāng)前生成的兩個(gè)邊界點(diǎn)與上次生成的兩個(gè)邊界點(diǎn)中,分別將位于道路同側(cè)的邊界點(diǎn)相減,得到兩個(gè)邊界向量; 對(duì)兩個(gè)邊界向量分別進(jìn)行向量標(biāo)準(zhǔn)化操作后進(jìn)行點(diǎn)乘; 判斷點(diǎn)乘結(jié)果是否為負(fù)值;若為負(fù)值,則交叉,若為正值,則不交叉。
7.一種游戲地形道路生成裝置,其特征在于,包括輸入模塊,插值模塊,處理模塊,和道路生成模塊;其中, 輸入模塊,用于輸入至少4個(gè)地形上的坐標(biāo)點(diǎn)作為三次樣條曲線的關(guān)鍵點(diǎn); 插值模塊,對(duì)每4個(gè)相鄰的關(guān)鍵點(diǎn)進(jìn)行樣條插值,計(jì)算插值點(diǎn)的坐標(biāo); 處理模塊,用于根據(jù)第i+Ι插值點(diǎn)和當(dāng)前第i插值點(diǎn)生成道路的邊界點(diǎn),根據(jù)邊界點(diǎn)生成道路頂點(diǎn),將頂點(diǎn)保存在頂點(diǎn)數(shù)組中并生成頂點(diǎn)索引數(shù)組; 道路生成模塊,用于根據(jù)頂點(diǎn)數(shù)組和頂點(diǎn)索引數(shù)組生成道路并進(jìn)行渲染。
8.根據(jù)權(quán)利要求7所述的游戲地形道路生成裝置,其特征在干,在所述處理模塊和道路生成模塊之間還包括判斷模塊,所述判斷模塊用于判斷處理模塊當(dāng)前生成的兩個(gè)邊界點(diǎn)的向量與上次生成的兩個(gè)邊界點(diǎn)的向量是否交叉;若交叉,則所述道路生成模塊根據(jù)頂點(diǎn)數(shù)組和頂點(diǎn)索引數(shù)組生成道路并進(jìn)行渲染;否則,所述處理模塊將根據(jù)下ー個(gè)插值點(diǎn)繼續(xù)生成道路邊界點(diǎn)和頂點(diǎn)。全文摘要
本發(fā)明公開(kāi)了一種游戲地形道路生成方法和裝置,對(duì)輸入的關(guān)鍵點(diǎn)利用三次樣條曲線函數(shù)進(jìn)行插值計(jì)算得到插值點(diǎn),根據(jù)插值點(diǎn)確定道路的邊界點(diǎn)和頂點(diǎn)數(shù)據(jù),根據(jù)頂點(diǎn)數(shù)據(jù)在地形上生成道路。本發(fā)明的技術(shù)方案,提供了一種在現(xiàn)代題材游戲中鋪設(shè)道路的解決方案,使美術(shù)人員能夠在地形編輯器中快速、方便的鋪設(shè)道路,并且使道路邊界更加清晰,使游戲中的虛擬世界更加逼真。
文檔編號(hào)G06T15/04GK102663802SQ201210119508
公開(kāi)日2012年9月12日 申請(qǐng)日期2012年4月20日 優(yōu)先權(quán)日2012年4月20日
發(fā)明者張明陽(yáng) 申請(qǐng)人:北京像素軟件科技股份有限公司
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
准格尔旗| 怀仁县| 台东市| 宜兰县| 邢台市| 开远市| 塔河县| 邓州市| 周宁县| 五家渠市| 青岛市| 保德县| 营山县| 儋州市| 广南县| 麻阳| 乳山市| 甘洛县| 民乐县| 陈巴尔虎旗| 松阳县| 东乡族自治县| 会同县| 彭山县| 筠连县| 大理市| 抚远县| 阿坝| 南雄市| 娄烦县| 安平县| 稷山县| 蒙山县| 施秉县| 汶川县| 天全县| 上饶县| 扶沟县| 昌邑市| 洛扎县| 新宁县|