本發(fā)明涉及游戲渲染領(lǐng)域,尤其涉及一種渲染方法及裝置。
背景技術(shù):
在游戲中,在設(shè)計(jì)玩家與BOSS戰(zhàn)斗時(shí),常常采用分塊戰(zhàn)斗的玩法。在分塊戰(zhàn)斗時(shí),需對(duì)被點(diǎn)擊的分塊進(jìn)行特效顯示,以表示分塊正在被攻擊。常見(jiàn)的玩法設(shè)計(jì)有如下幾種:1、BOSS僅有一些特定分塊可以被攻擊,此時(shí),玩家需先攻擊這些分塊,直到這些分塊被消滅后才能攻擊其他部分;2、通過(guò)攻擊BOSS的特定的分塊來(lái)降低BOSS的威力,例如,當(dāng)消滅到BOSS的手部分塊可以降低BOSS的攻擊力或使得BOSS無(wú)法釋放某些技能;3、在攻擊特定分塊時(shí)可以對(duì)BOSS造成更大的傷害。
對(duì)于2D游戲而言,分塊技術(shù)比較常見(jiàn)的是用鏤空的方式渲染BOSS的各個(gè)部分,如裝備和衣服,然后再和人物本體組合拼接。
技術(shù)實(shí)現(xiàn)要素:
由于2D游戲的分塊設(shè)置難度較大,需要匹配不同分塊對(duì)應(yīng)的資源的動(dòng)作和鏤空位置以保證各個(gè)資源完全同步,程序方面在合成時(shí)也難以區(qū)分。而在3D游戲中,分塊技術(shù)的設(shè)置較為容易,只需要對(duì)BOSS的3D模型進(jìn)行子模塊編輯,子模塊更換或子模塊貼圖更換就可以實(shí)現(xiàn)分塊的邏輯編輯。因而在以2D渲染為主的2D游戲中加入3D游戲的分塊技術(shù),可使美術(shù)和程序的實(shí)現(xiàn)比較簡(jiǎn)單,同時(shí)也可以省去繁瑣的鏤空和匹配2D圖像的工作。
針對(duì)上述問(wèn)題,本發(fā)明的目的在于提供一種渲染方法,包括如下步驟:
獲取當(dāng)前顯示畫(huà)面上的所有對(duì)象;其中,所述的所有對(duì)象包括至少一個(gè)2D對(duì)象和至少一個(gè)3D對(duì)象,所述的所有對(duì)象根據(jù)顯示層次關(guān)系排列在對(duì)象列表中;且所述3D對(duì)象包括至少一個(gè)被注冊(cè)了回調(diào)函數(shù)的分塊;
監(jiān)聽(tīng)用戶(hù)的點(diǎn)擊操作,并根據(jù)所述對(duì)象的顯示層次及所述點(diǎn)擊操作的坐標(biāo)確定被點(diǎn)擊的對(duì)象;
當(dāng)判斷被點(diǎn)擊的對(duì)象為3D對(duì)象時(shí),根據(jù)所述坐標(biāo)確定所述3D對(duì)象被點(diǎn)擊的分塊;
根據(jù)所述顯示層次關(guān)系對(duì)所述對(duì)象列表內(nèi)的對(duì)象進(jìn)行渲染,以生成發(fā)送至顯示屏的畫(huà)面幀;
調(diào)用為所述被點(diǎn)擊的分塊注冊(cè)的回調(diào)函數(shù)對(duì)所述被點(diǎn)擊的分塊進(jìn)行處理。
優(yōu)選地,所述監(jiān)聽(tīng)用戶(hù)的點(diǎn)擊操作,并根據(jù)所述對(duì)象的顯示層次及所述點(diǎn)擊操作的坐標(biāo)確定被點(diǎn)擊的對(duì)象,具體包括:
監(jiān)聽(tīng)用戶(hù)的點(diǎn)擊操作,并獲取所述點(diǎn)擊操作的坐標(biāo);
當(dāng)判斷所述坐標(biāo)位于一個(gè)2D對(duì)象的像素包圍盒中時(shí),對(duì)所述2D對(duì)象進(jìn)行標(biāo)記;
將所述坐標(biāo)轉(zhuǎn)化為投影平面坐標(biāo),并以3D引擎中的虛擬攝像機(jī)位置為原點(diǎn)向所述投影平面坐標(biāo)做射線,對(duì)所述射線與3D世界內(nèi)的3D對(duì)象做求交操作,并對(duì)與所述射線具有相交關(guān)系的3D對(duì)象進(jìn)行標(biāo)記;
比較被標(biāo)記的2D對(duì)象和/或被標(biāo)記的3D對(duì)象的顯示層次,并將所述顯示層次處于最上層的對(duì)象設(shè)置為被點(diǎn)擊的對(duì)象。
優(yōu)選地,所述當(dāng)判斷被點(diǎn)擊的對(duì)象為3D對(duì)象時(shí),根據(jù)所述坐標(biāo)確定所述3D對(duì)象的被點(diǎn)擊的分塊,具體為:
當(dāng)判斷被點(diǎn)擊的對(duì)象為3D對(duì)象時(shí),獲取與所述射線有相交關(guān)系的面片所在的分塊,并確定所述分塊為被點(diǎn)擊的分塊。
優(yōu)選地,所述根據(jù)所述顯示層次關(guān)系對(duì)所述對(duì)象列表內(nèi)的對(duì)象進(jìn)行渲染,以生成發(fā)送至顯示屏的畫(huà)面幀具體為:
根據(jù)所述對(duì)象的顯示層次關(guān)系確定當(dāng)前渲染的對(duì)象;
當(dāng)判斷當(dāng)前要渲染的對(duì)象為2D對(duì)象時(shí),將所述2D對(duì)象發(fā)送給2D引擎進(jìn)行渲染,并將由所述2D引擎渲染得到的2D資源繪制在預(yù)先申請(qǐng)的與當(dāng)前顯示畫(huà)面的大小對(duì)應(yīng)的系統(tǒng)內(nèi)存中;
當(dāng)判斷當(dāng)前要渲染的對(duì)象為3D對(duì)象時(shí),將所述3D對(duì)象發(fā)送給3D引擎進(jìn)行渲染得到3D資源,并在確定預(yù)先申請(qǐng)的與當(dāng)前顯示畫(huà)面的大小對(duì)應(yīng)的系統(tǒng)內(nèi)存中存儲(chǔ)有由2D對(duì)象渲染得到的2D資源時(shí),將所述2D資源及所述3D資源發(fā)送給顯卡進(jìn)行渲染,并再次申請(qǐng)與當(dāng)前顯示畫(huà)面的大小對(duì)應(yīng)的系統(tǒng)內(nèi)存;
在完成對(duì)所述對(duì)象列表中的所有對(duì)象的渲染后,生成發(fā)送至顯示屏的畫(huà)面幀。
優(yōu)選地,在獲取當(dāng)前顯示畫(huà)面上的所有對(duì)象之前,還包括:
在2d引擎中引入3d引擎的渲染和消息處理機(jī)制,并將3d引擎與當(dāng)前顯示畫(huà)面的窗口關(guān)聯(lián),以創(chuàng)建得到2d渲染和3d渲染的混合環(huán)境及將3d引擎的渲染和消息處理循環(huán)機(jī)制加入到2D游戲邏輯的主循環(huán)機(jī)制當(dāng)中。
本發(fā)明還提供一種渲染裝置,包括:
對(duì)象獲取單元,用于獲取當(dāng)前顯示畫(huà)面上的所有對(duì)象;其中,所述的所有對(duì)象包括至少一個(gè)2D對(duì)象和至少一個(gè)3D對(duì)象,所述的所有對(duì)象根據(jù)顯示層次關(guān)系排列在對(duì)象列表中;且所述3D對(duì)象包括至少一個(gè)被注冊(cè)了回調(diào)函數(shù)的分塊;
對(duì)象監(jiān)聽(tīng)單元,用于監(jiān)聽(tīng)用戶(hù)的點(diǎn)擊操作,并根據(jù)所述對(duì)象的顯示層次及所述點(diǎn)擊操作的坐標(biāo)確定被點(diǎn)擊的對(duì)象;
分塊確定單元,用于當(dāng)判斷被點(diǎn)擊的對(duì)象為3D對(duì)象時(shí),根據(jù)所述坐標(biāo)確定所述3D對(duì)象被點(diǎn)擊的分塊;
混合渲染單元,用于根據(jù)所述顯示層次關(guān)系對(duì)所述對(duì)象列表內(nèi)的對(duì)象進(jìn)行渲染,以生成發(fā)送至顯示屏的畫(huà)面幀;
回調(diào)函數(shù)調(diào)用單元,用于調(diào)用為所述被點(diǎn)擊的分塊注冊(cè)的回調(diào)函數(shù)對(duì)所述被點(diǎn)擊的分塊進(jìn)行處理。
優(yōu)選地,所述對(duì)象監(jiān)聽(tīng)單元具體包括:
坐標(biāo)監(jiān)聽(tīng)模塊,用于監(jiān)聽(tīng)用戶(hù)的點(diǎn)擊操作,并獲取所述點(diǎn)擊操作的坐標(biāo);
2D點(diǎn)擊判斷模塊,用于當(dāng)判斷所述坐標(biāo)位于一個(gè)2D對(duì)象的像素包圍盒中時(shí),對(duì)所述2D對(duì)象進(jìn)行標(biāo)記;
3D點(diǎn)擊判斷模塊,用于將所述坐標(biāo)轉(zhuǎn)化為投影平面坐標(biāo),并以3D引擎中的虛擬攝像機(jī)位置為原點(diǎn)向所述投影平面坐標(biāo)做射線,對(duì)所述射線與3D世界內(nèi)的3D對(duì)象做求交操作,并對(duì)與所述射線具有相交關(guān)系的3D對(duì)象進(jìn)行標(biāo)記;
比較模塊,用于比較被標(biāo)記的2D對(duì)象和/或被標(biāo)記的3D對(duì)象的顯示層次,并將所述顯示層次處于最上層的對(duì)象設(shè)置為被點(diǎn)擊的對(duì)象。
優(yōu)選地,所述分塊確定單元具體用于,當(dāng)判斷被點(diǎn)擊的對(duì)象為3D對(duì)象時(shí),獲取與所述射線有相交關(guān)系的面片所在的分塊,并確定所述分塊為被點(diǎn)擊的分塊。
優(yōu)選地,所述混合渲染單元具體包括:
對(duì)象確定模塊,用于根據(jù)所述對(duì)象的顯示層次關(guān)系確定當(dāng)前渲染的對(duì)象;
2D對(duì)象渲染模塊,用于當(dāng)判斷當(dāng)前要渲染的對(duì)象為2D對(duì)象時(shí),將所述2D對(duì)象發(fā)送給2D引擎進(jìn)行渲染,并將由所述2D引擎渲染得到的2D資源繪制在預(yù)先申請(qǐng)的與當(dāng)前顯示畫(huà)面的大小對(duì)應(yīng)的系統(tǒng)內(nèi)存中;
3D對(duì)象渲染模塊,用于當(dāng)判斷當(dāng)前要渲染的對(duì)象為3D對(duì)象時(shí),將所述3D對(duì)象發(fā)送給3D引擎進(jìn)行渲染得到3D資源,并在確定預(yù)先申請(qǐng)的與當(dāng)前顯示畫(huà)面的大小對(duì)應(yīng)的系統(tǒng)內(nèi)存中存儲(chǔ)有由2D對(duì)象渲染得到的2D資源時(shí),將所述2D資源及所述3D資源發(fā)送給顯卡進(jìn)行渲染,并再次申請(qǐng)與當(dāng)前顯示畫(huà)面的大小對(duì)應(yīng)的系統(tǒng)內(nèi)存;
畫(huà)面?zhèn)鬏斈K,用于在完成對(duì)所述對(duì)象列表中的所有對(duì)象的渲染后,生成發(fā)送至顯示屏的畫(huà)面幀。
優(yōu)選地,還包括:
環(huán)境創(chuàng)建單元,用于在2d引擎中引入3d引擎的渲染和消息處理機(jī)制,并將3d引擎與當(dāng)前顯示畫(huà)面的窗口關(guān)聯(lián),以創(chuàng)建得到2d渲染和3d渲染的混合環(huán)境及將3d引擎的渲染和消息處理循環(huán)機(jī)制加入到2D游戲邏輯的主循環(huán)機(jī)制當(dāng)中。
本發(fā)明實(shí)施例提供的渲染方法及裝置,通過(guò)在2D游戲中引入3D對(duì)象的分塊方法,并提供基于2D、3D的混合渲染機(jī)制和消息處理機(jī)制,從而基于3D對(duì)象的分塊戰(zhàn)斗模式也適用于2D游戲中,使得以2D渲染為主的2D游戲中玩家操控人物或者NPC的有涉及到分塊邏輯的玩法,美術(shù)和程序的實(shí)現(xiàn)比較簡(jiǎn)單,并省去繁瑣的鏤空和匹配2D圖像的工作。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明的技術(shù)方案,下面將對(duì)實(shí)施方式中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施方式,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明實(shí)施例提供的渲染方法的流程示意圖。
圖2是本發(fā)明實(shí)施例提供的當(dāng)前顯示畫(huà)面的示意圖。
圖3是本發(fā)明實(shí)施例提供的對(duì)3D對(duì)象進(jìn)行分塊的示意圖。
圖4是本發(fā)明實(shí)施例提供的對(duì)象管理層次結(jié)構(gòu)圖。
圖5是本發(fā)明實(shí)施例提供的消息處理機(jī)制圖。
圖6是本發(fā)明實(shí)施例提供的渲染裝置的結(jié)構(gòu)示意圖。
圖7是圖6的對(duì)象監(jiān)聽(tīng)單元的結(jié)構(gòu)示意圖。
圖8是圖6的混合渲染單元的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
請(qǐng)參閱圖1,本發(fā)明提供了一種渲染方法,包括如下步驟:
S101,獲取當(dāng)前顯示畫(huà)面上的所有對(duì)象,并將獲取的所有對(duì)象根據(jù)顯示層次關(guān)系排列在對(duì)象列表中;其中,所述的所有對(duì)象包括至少一個(gè)2D對(duì)象和至少一個(gè)3D對(duì)象,且所述3D對(duì)象包括至少一個(gè)被注冊(cè)了回調(diào)函數(shù)的分塊。
如圖2所示,在本發(fā)明實(shí)施例中,當(dāng)前顯示畫(huà)面包括了至少一個(gè)2D對(duì)象02(所述2D對(duì)象可為游戲中NPC,玩家控制的游戲覺(jué)得,游戲中的場(chǎng)景畫(huà)面等)及至少一個(gè)3D對(duì)象01(特別的,為游戲中的BOSS),其中,這些對(duì)象具有不同的顯示層次關(guān)系,且這些對(duì)象根據(jù)顯示層次關(guān)系依次排列在對(duì)象列表中。例如,對(duì)于一般的2D游戲而言,對(duì)象的顯示層次是以屏幕中的顯示位置來(lái)排序的,在屏幕中顯示較上端的對(duì)象為離玩家視角比較遠(yuǎn)的對(duì)象,所以層次較低,要在離玩家近的對(duì)象的下方渲染。
在本發(fā)明實(shí)例中,為了實(shí)現(xiàn)BOSS的分塊戰(zhàn)斗,在制作3D對(duì)象時(shí),需先對(duì)所述3D對(duì)象進(jìn)行分塊,并為每個(gè)分塊注冊(cè)一個(gè)回調(diào)函數(shù),當(dāng)所述3D對(duì)象被點(diǎn)擊時(shí),調(diào)用所述回調(diào)函數(shù),以使所述分塊根據(jù)所述回調(diào)函數(shù)的定義進(jìn)行特殊顯示,如可顯示成紅色或其他變色處理,使得用戶(hù)可知道其正在攻擊的部位。
如圖3所示,一個(gè)3D對(duì)象是由多個(gè)面片組成,每個(gè)面片包括3個(gè)頂點(diǎn),在進(jìn)行編輯時(shí),可選中需要分塊的面片,并將這些面片編輯成一個(gè)子模塊組,從而得到一個(gè)分塊。例如,可對(duì)所述3D模塊的左腿、右腿、武器、手部、身體、頭部等分別進(jìn)行分塊。當(dāng)然,將一個(gè)3D對(duì)象具體分為幾塊以及將哪些部分分為一塊可根據(jù)實(shí)際的需要及戰(zhàn)斗設(shè)定進(jìn)行設(shè)置,本發(fā)明不做具體限定。
如圖4所示,在本發(fā)明實(shí)施例中,對(duì)于需要處理分塊的3D對(duì)象,在對(duì)象層次通過(guò)對(duì)象的id來(lái)管理,分塊層次通過(guò)分塊的id來(lái)管理,事件響應(yīng)函數(shù)由事件類(lèi)型標(biāo)示管理(例如:鼠標(biāo)雙擊,鼠標(biāo)單擊)。
S102,監(jiān)聽(tīng)用戶(hù)的點(diǎn)擊操作,并根據(jù)所述對(duì)象的顯示層次及所述點(diǎn)擊操作的坐標(biāo)確定被點(diǎn)擊的對(duì)象。
如圖5所示,在本發(fā)明實(shí)施例中,為了確定用戶(hù)的點(diǎn)擊操作,需先創(chuàng)建2d和3d混合的環(huán)境,并在2d引擎中引入3d引擎的渲染和消息處理機(jī)制。其中,2d引擎中通過(guò)獲取鼠標(biāo)的點(diǎn)擊坐標(biāo)的消息信息來(lái)繪制2d對(duì)象;將3d引擎與當(dāng)前顯示畫(huà)面的窗口關(guān)聯(lián),獲得窗口的點(diǎn)擊信息,并處理點(diǎn)擊信息。
在本發(fā)明實(shí)施例中,將3d引擎的渲染和消息處理循環(huán)加入到游戲邏輯的主循環(huán)之中,在消息處理時(shí),先處理2d引擎的消息,然后處理3d引擎的消息,通過(guò)判斷被點(diǎn)擊到的2d、3d對(duì)象的層次關(guān)系來(lái)決定響應(yīng)哪一個(gè)對(duì)象的點(diǎn)擊事件。
具體地,所述步驟S102可包括如下步驟:
S1021,監(jiān)聽(tīng)用戶(hù)的點(diǎn)擊操作,并獲取所述點(diǎn)擊操作的坐標(biāo)。
在本發(fā)明實(shí)施例中,當(dāng)用戶(hù)通過(guò)鼠標(biāo)或鍵盤(pán)或其他外部輸入設(shè)備在所述當(dāng)前顯示畫(huà)面上進(jìn)行點(diǎn)擊操作時(shí),可獲取所述點(diǎn)擊操作的坐標(biāo)。
S1022,當(dāng)判斷所述坐標(biāo)位于一個(gè)2D對(duì)象的像素包圍盒中時(shí),對(duì)所述2D對(duì)象進(jìn)行標(biāo)記。
在本發(fā)明實(shí)施例中,可通過(guò)判定包圍盒(包圍盒的含義是指:圖片在讀取時(shí)會(huì)獲得圖片的長(zhǎng)寬,在繪制時(shí)會(huì)知道圖片的位置)的方式來(lái)判斷鼠標(biāo)的坐標(biāo)是否在2D對(duì)象的像素包圍中,如果坐標(biāo)在某個(gè)2D對(duì)象的包圍盒中,則判定該2D對(duì)象被點(diǎn)擊到,否則為非被點(diǎn)擊。
S1023,將所述坐標(biāo)轉(zhuǎn)化為投影平面坐標(biāo),并以3D引擎中的虛擬攝像機(jī)位置為原點(diǎn)向所述投影平面坐標(biāo)做射線,對(duì)所述射線與3D世界內(nèi)的3D對(duì)象做求交操作,并對(duì)與所述射線具有相交關(guān)系的3D對(duì)象進(jìn)行標(biāo)記。
S1024,比較被標(biāo)記的2D對(duì)象和/或被標(biāo)記的3D對(duì)象的顯示層次,并將所述顯示層次處于最上層的對(duì)象設(shè)置為被點(diǎn)擊的對(duì)象。
S103,當(dāng)判斷被點(diǎn)擊的對(duì)象為3D對(duì)象時(shí),根據(jù)所述坐標(biāo)確定所述3D對(duì)象被點(diǎn)擊的分塊。
具體地,由于所述3D對(duì)象是由一系列面片組成的,因此當(dāng)判斷被點(diǎn)擊的對(duì)象為3D對(duì)象時(shí),可通過(guò)獲取與所述射線有相交關(guān)系的面片所在的分塊,來(lái)確定所述3D對(duì)象被點(diǎn)擊的分塊。
S104,根據(jù)所述顯示層次關(guān)系對(duì)所述對(duì)象列表內(nèi)的對(duì)象進(jìn)行渲染,以生成發(fā)送至顯示屏的畫(huà)面幀。
具體地,
S1041,根據(jù)所述對(duì)象的顯示層次關(guān)系確定當(dāng)前渲染的對(duì)象。
S1042,當(dāng)判斷當(dāng)前要渲染的對(duì)象為2D對(duì)象時(shí),將所述2D對(duì)象發(fā)送給2D引擎進(jìn)行渲染,并將由所述2D引擎渲染得到的2D資源繪制在預(yù)先申請(qǐng)的與當(dāng)前顯示畫(huà)面的大小對(duì)應(yīng)的系統(tǒng)內(nèi)存中。
S1043,當(dāng)判斷當(dāng)前要渲染的對(duì)象為3D對(duì)象時(shí),將所述3D對(duì)象發(fā)送給3D引擎進(jìn)行渲染得到3D資源,并在確定預(yù)先申請(qǐng)的與當(dāng)前顯示畫(huà)面的大小對(duì)應(yīng)的系統(tǒng)內(nèi)存中存儲(chǔ)有由2D對(duì)象渲染得到的2D資源時(shí),將所述2D資源及所述3D資源發(fā)送給顯卡進(jìn)行渲染,并再次申請(qǐng)與當(dāng)前顯示畫(huà)面的大小對(duì)應(yīng)的系統(tǒng)內(nèi)存。
S1044,在完成對(duì)所述對(duì)象列表中的所有對(duì)象的渲染后,生成發(fā)送至顯示屏的畫(huà)面幀。
具體地,首先申請(qǐng)和當(dāng)前顯示畫(huà)面大小一樣的內(nèi)存空間用于存儲(chǔ)2D引擎渲染的2D對(duì)象,以將渲染得到的2D資源繪制在該內(nèi)存空間中。接著按照對(duì)象列表中的對(duì)象的順序依次提交繪制,有兩種情況:1、當(dāng)提交的是2D對(duì)象時(shí):繪制在當(dāng)前申請(qǐng)的內(nèi)存空間中;2、當(dāng)提交的是3D對(duì)象:將當(dāng)前內(nèi)存空間中的2D資源提交3D引擎,然后提交3D對(duì)象給3D引擎進(jìn)行渲染得到3D資源,并由顯卡對(duì)2D資源和3D資源進(jìn)行渲染,接著生成新的內(nèi)存空間用于下一層2D對(duì)象的渲染繪制。3、重復(fù)步驟1,2直到對(duì)象列表中對(duì)象均被繪制。
S105,調(diào)用為所述被點(diǎn)擊的分塊注冊(cè)的回調(diào)函數(shù)對(duì)所述被點(diǎn)擊的分塊進(jìn)行處理。
在本發(fā)明實(shí)施例中,在完成渲染后,調(diào)用為所述被點(diǎn)擊的分塊注冊(cè)的回調(diào)函數(shù)對(duì)所述被點(diǎn)擊的分塊進(jìn)行處理,使得所述分塊特殊顯示,從而使得玩家可以達(dá)到分塊攻擊。
綜上所述,本發(fā)明實(shí)施例提供的渲染方法,通過(guò)在2D游戲中引入3D對(duì)象的分塊方法,并提供基于2D、3D的混合渲染機(jī)制和消息處理機(jī)制,從而基于3D的分塊戰(zhàn)斗模式也適用于2D游戲中,使得以2D渲染為主的游戲中玩家操控人物或者NPC的有涉及到分塊邏輯的玩法,美術(shù)和程序的實(shí)現(xiàn)比較簡(jiǎn)單,并省去繁瑣的鏤空和匹配2D圖像的工作。
請(qǐng)一并參閱圖6,本發(fā)明還提供一種渲染裝置,包括:
對(duì)象獲取單元10,用于獲取當(dāng)前顯示畫(huà)面上的所有對(duì)象,并將獲取的所有對(duì)象根據(jù)顯示層次關(guān)系排列在對(duì)象列表中;其中,所述的所有對(duì)象包括至少一個(gè)2D對(duì)象和至少一個(gè)3D對(duì)象,且所述3D對(duì)象包括至少一個(gè)被注冊(cè)了回調(diào)函數(shù)的分塊。
對(duì)象監(jiān)聽(tīng)單元20,用于監(jiān)聽(tīng)用戶(hù)的點(diǎn)擊操作,并根據(jù)所述對(duì)象的顯示層次及所述點(diǎn)擊操作的坐標(biāo)確定被點(diǎn)擊的對(duì)象。
分塊確定單元30,用于當(dāng)判斷被點(diǎn)擊的對(duì)象為3D對(duì)象時(shí),根據(jù)所述坐標(biāo)確定所述3D對(duì)象被點(diǎn)擊的分塊。
混合渲染單元40,用于根據(jù)所述顯示層次關(guān)系對(duì)所述對(duì)象列表內(nèi)的對(duì)象進(jìn)行渲染,以生成發(fā)送至顯示屏的畫(huà)面幀。
回調(diào)函數(shù)調(diào)用單元50,用于調(diào)用為所述被點(diǎn)擊的分塊注冊(cè)的回調(diào)函數(shù)對(duì)所述被點(diǎn)擊的分塊進(jìn)行處理。
優(yōu)選地,請(qǐng)一并參閱圖7,所述對(duì)象監(jiān)聽(tīng)單元20具體包括:
坐標(biāo)監(jiān)聽(tīng)模塊21,用于監(jiān)聽(tīng)用戶(hù)的點(diǎn)擊操作,并獲取所述點(diǎn)擊操作的坐標(biāo);
2D點(diǎn)擊判斷模塊22,用于當(dāng)判斷所述坐標(biāo)位于一個(gè)2D對(duì)象的像素包圍盒中時(shí),對(duì)所述2D對(duì)象進(jìn)行標(biāo)記;
3D點(diǎn)擊判斷模塊23,用于將所述坐標(biāo)轉(zhuǎn)化為投影平面坐標(biāo),并以3D引擎中的虛擬攝像機(jī)位置為原點(diǎn)向所述投影平面坐標(biāo)做射線,對(duì)所述射線與3D世界內(nèi)的3D對(duì)象做求交操作,并對(duì)與所述射線具有相交關(guān)系的3D對(duì)象進(jìn)行標(biāo)記;
比較單元24,用于比較被標(biāo)記的2D對(duì)象和/或被標(biāo)記的3D對(duì)象的顯示層次,并將所述顯示層次處于最上層的對(duì)象設(shè)置為被點(diǎn)擊的對(duì)象。
優(yōu)選地,所述分塊確定單元30具體用于,當(dāng)判斷被點(diǎn)擊的對(duì)象為3D對(duì)象時(shí),獲取與所述射線有相交關(guān)系的面片所在的分塊,并確定所述分塊為被點(diǎn)擊的分塊。
優(yōu)選地,請(qǐng)一并參閱圖8,所述混合渲染單元40具體包括:
對(duì)象確定模塊41,用于根據(jù)所述對(duì)象的顯示層次關(guān)系確定當(dāng)前渲染的對(duì)象;
2D對(duì)象渲染模塊42,用于當(dāng)判斷當(dāng)前要渲染的對(duì)象為2D對(duì)象時(shí),將所述2D對(duì)象發(fā)送給2D引擎進(jìn)行渲染,并將由所述2D引擎渲染得到的2D資源繪制在預(yù)先申請(qǐng)的與當(dāng)前顯示畫(huà)面的大小對(duì)應(yīng)的系統(tǒng)內(nèi)存中;
3D對(duì)象渲染模塊43,用于當(dāng)判斷當(dāng)前要渲染的對(duì)象為3D對(duì)象時(shí),將所述3D對(duì)象發(fā)送給3D引擎進(jìn)行渲染得到3D資源,并在確定預(yù)先申請(qǐng)的與當(dāng)前顯示畫(huà)面的大小對(duì)應(yīng)的系統(tǒng)內(nèi)存中存儲(chǔ)有由2D對(duì)象渲染得到的2D資源時(shí),將所述2D資源及所述3D資源發(fā)送給顯卡進(jìn)行渲染,并再次申請(qǐng)與當(dāng)前顯示畫(huà)面的大小對(duì)應(yīng)的系統(tǒng)內(nèi)存;
畫(huà)面?zhèn)鬏斈K44,用于在完成對(duì)所述對(duì)象列表中的所有對(duì)象的渲染后,生成發(fā)送至顯示屏的畫(huà)面幀。
優(yōu)選地,所述渲染裝置100還包括:
環(huán)境創(chuàng)建單元60,用于在2d引擎中引入3d引擎的渲染和消息處理機(jī)制,并將3d引擎與當(dāng)前顯示畫(huà)面的窗口關(guān)聯(lián),以創(chuàng)建得到2d渲染和3d渲染的混合環(huán)境及將3d引擎的渲染和消息處理循環(huán)機(jī)制加入到2D游戲邏輯的主循環(huán)機(jī)制當(dāng)中。
綜上所述,本發(fā)明實(shí)施例提供的渲染裝置100,通過(guò)在2D游戲中引入3D對(duì)象的分塊方法,并提供基于2D、3D的混合渲染機(jī)制和消息處理機(jī)制,從而基于3D的分塊戰(zhàn)斗模式也適用于2D游戲中,使得以2D渲染為主的游戲中玩家操控人物或者NPC的有涉及到分塊邏輯的玩法,美術(shù)和程序的實(shí)現(xiàn)比較簡(jiǎn)單,并省去繁瑣的鏤空和匹配2D圖像的工作。
以上所揭露的僅為本發(fā)明一種較佳實(shí)施例而已,當(dāng)然不能以此來(lái)限定本發(fā)明之權(quán)利范圍,本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例的全部或部分流程,并依本發(fā)明權(quán)利要求所作的等同變化,仍屬于發(fā)明所涵蓋的范圍。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過(guò)計(jì)算機(jī)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述的程序可存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲(chǔ)介質(zhì)可為磁碟、光盤(pán)、只讀存儲(chǔ)記憶體(Read-Only Memory,ROM)或隨機(jī)存儲(chǔ)記憶體(Random Access Memory,RAM)等。