一種3d場(chǎng)景的繪制系統(tǒng)及方法、終端的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及場(chǎng)景繪制領(lǐng)域,尤其涉及一種3D場(chǎng)景的繪制系統(tǒng)及方法、終端。
【背景技術(shù)】
[0002]在3D游戲、電影、GIS等領(lǐng)域,通常需要搭建虛擬的3D場(chǎng)景。目前,搭建虛擬的3D場(chǎng)景是以directX或者OpenGL為基礎(chǔ),通過(guò)搭建一個(gè)能夠顯示三維模型的3D場(chǎng)景,在其中放置一些需要顯示的3D模型,再將這些3D模型通過(guò)幾何變換,紋理映射,貼圖采樣等技術(shù)繪制到2D屏幕上,從而在2D屏幕上表現(xiàn)出三維的虛擬場(chǎng)景世界的效果。一般地,一個(gè)完整的3D場(chǎng)景需要的組件有:地形,天空盒,虛擬攝像機(jī),3D模型,粒子效果等。
[0003]虛擬攝像機(jī)是3D場(chǎng)景中非常重要的一個(gè)組件。與現(xiàn)實(shí)世界中拍照和攝像時(shí)調(diào)整鏡頭類似,如圖1所示,在虛擬世界繪制時(shí),通用的做法就是將虛擬攝像機(jī)能拍到的部分通過(guò)投影變換等方式繪制并顯示到2D屏幕上。虛擬攝像機(jī)的鏡頭往往會(huì)聚焦在一個(gè)主要人物或主要物體上,并跟隨著主要人物或主要物體的移動(dòng)而移動(dòng)。比如在游戲中,控制一個(gè)主要角色移動(dòng)時(shí),鏡頭也會(huì)跟隨主要角色移動(dòng)。而在很多3D街景軟件和一些第一人稱游戲中,也是通過(guò)鏡頭的移動(dòng),來(lái)給用戶營(yíng)造一種身臨其境的感受。
【發(fā)明內(nèi)容】
[0004]由于3D場(chǎng)景中存在著目標(biāo)模型(即被聚焦的模型),比如游戲中控制的主要角色,或者用戶關(guān)注的某個(gè)特定的3D模型,此時(shí)用戶必然希望關(guān)注的目標(biāo)模型能夠獲得完整的顯示。假如鏡頭和目標(biāo)模型中間存在其他的障礙物模型,則可能導(dǎo)致目標(biāo)模型被遮擋而無(wú)法顯示或無(wú)法完全顯示,影響用戶的觀感以及目標(biāo)模型的表現(xiàn)力。
[0005]—種情形是,虛擬攝像機(jī)的鏡頭位于所述障礙物模型的內(nèi)部,這必然導(dǎo)致鏡頭被遮擋而不能正常拍到目標(biāo)模型,因而在繪制時(shí)可能僅僅只繪制部分的障礙物模型。
[0006]另一種情形是,障礙物模型位于鏡頭和目標(biāo)模型之間,此時(shí)若正常繪制障礙物模型,則必然導(dǎo)致目標(biāo)模型在鏡頭中無(wú)法完全顯示甚至無(wú)法顯示,而如果直接不繪制障礙物模型,則會(huì)破壞整個(gè)3D場(chǎng)景的完整性。
[0007]本發(fā)明的目的在于提供一種3D場(chǎng)景的繪制系統(tǒng)及方法、終端,以解決在鏡頭和目標(biāo)模型之間存在障礙物模型的畫面顯示問(wèn)題。
[0008]本發(fā)明通過(guò)下述技術(shù)手段解決前述技術(shù)問(wèn)題:
[0009]—種3D場(chǎng)景的繪制系統(tǒng),包括虛擬攝像機(jī)單元,用于基于設(shè)定的焦點(diǎn)獲取3D場(chǎng)景的待繪制區(qū)域;碰撞計(jì)數(shù)單元,用于計(jì)算所述虛擬攝像機(jī)單元的鏡頭與所述焦點(diǎn)形成的連接線與所述3D場(chǎng)景中的3D模型的碰撞次數(shù),并在所述碰撞次數(shù)為奇數(shù)次時(shí),發(fā)送第一指令至移動(dòng)單元,在所述碰撞次數(shù)為非零的偶數(shù)次時(shí),發(fā)送第二指令至透明度處理單元;所述移動(dòng)單元,用于響應(yīng)于所述第一指令,朝靠近所述焦點(diǎn)的方向移動(dòng)所述虛擬攝像機(jī)單元;所述透明度處理單元,用于響應(yīng)于所述第二指令,獲取與所述連接線發(fā)生碰撞的3D模型的當(dāng)前透明度,并在所述當(dāng)前透明度大于預(yù)設(shè)的目標(biāo)透明度時(shí),減小所述3D模型的透明度;繪制單元,用于對(duì)所述虛擬攝像機(jī)單元能夠獲取到的待繪制區(qū)域進(jìn)行繪制,以生成相應(yīng)的畫面幀。
[0010]本發(fā)明提供的3D場(chǎng)景的繪制系統(tǒng),通過(guò)所述碰撞計(jì)數(shù)單元檢測(cè)在所述虛擬攝像機(jī)單元的鏡頭與所述焦點(diǎn)之間的遮擋情況,以通過(guò)所述移動(dòng)單元對(duì)所述虛擬攝像機(jī)單元的鏡頭進(jìn)行了移動(dòng)處理使之從障礙物模型內(nèi)部移出或者通過(guò)所述透明度處理單元對(duì)障礙物模型進(jìn)行了降低透明度處理,使得所述繪制單元繪制得到的畫面幀中,可以始終觀測(cè)到完整的目標(biāo)模型,提高了用戶的游戲體驗(yàn)和視覺(jué)觀感。
[0011]優(yōu)選地,所述碰撞計(jì)數(shù)單元具體用于,計(jì)算所述虛擬攝像機(jī)單元的鏡頭與所述焦點(diǎn)形成的連接線與所述3D場(chǎng)景中的組成所述3D模型的面片的碰撞次數(shù),并在所述碰撞次數(shù)為奇數(shù)次時(shí),發(fā)送第一指令給所述移動(dòng)單元,在所述碰撞次數(shù)為非零的偶數(shù)次時(shí),發(fā)送第二指令給所述透明度處理單元。
[0012]優(yōu)選地,在每個(gè)3D模型外部還設(shè)置有一個(gè)包圍所述3D模型的包圍盒;則所述碰撞計(jì)數(shù)單元具體用于,計(jì)算所述虛擬攝像機(jī)單元的鏡頭與所述焦點(diǎn)形成的連接線與所述3D場(chǎng)景中的各個(gè)3D模型的包圍盒表面的碰撞次數(shù),并在所述碰撞次數(shù)為奇數(shù)次時(shí),發(fā)送第一指令給所述移動(dòng)單元,在所述碰撞次數(shù)為非零的偶數(shù)次時(shí),發(fā)送第二指令給所述透明度處理單元。
[0013]本優(yōu)選方案,通過(guò)檢測(cè)所述虛擬攝像機(jī)單元的鏡頭與所述焦點(diǎn)形成的連接線與所述3D場(chǎng)景中的各個(gè)3D模型的包圍盒表面的碰撞次數(shù),簡(jiǎn)化了計(jì)算過(guò)程,提高了處理效率。
[0014]優(yōu)選地,所述移動(dòng)單元具體包括:第一移動(dòng)步長(zhǎng)計(jì)算模塊,用于響應(yīng)所述第一指令,并根據(jù)所述鏡頭與離所述鏡頭最近且與所述連接線發(fā)生碰撞的面片的距離生成每幀的移動(dòng)步長(zhǎng);第一鏡頭移動(dòng)模塊,用于在每幀刷新時(shí),根據(jù)所述移動(dòng)步長(zhǎng)沿所述連接線朝靠近所述焦點(diǎn)的方向移動(dòng)所述虛擬攝像機(jī)單元。
[0015]優(yōu)選地,所述移動(dòng)單元具體包括:第二移動(dòng)步長(zhǎng)計(jì)算模塊,用于響應(yīng)所述第一指令,并根據(jù)所述鏡頭與離所述鏡頭最近且與所述連接線發(fā)生碰撞的包圍盒表面的距離生成每幀的移動(dòng)步長(zhǎng);第二鏡頭移動(dòng)模塊,用于在每幀刷新時(shí),根據(jù)所述移動(dòng)步長(zhǎng)沿所述連接線朝靠近所述焦點(diǎn)的方向移動(dòng)所述虛擬攝像機(jī)單元。
[0016]優(yōu)選地,所述3D場(chǎng)景的繪制系統(tǒng)還包括透明度還原單元,所述透明度還原單元,用于在確定一個(gè)3D模型與所述連接線的碰撞狀態(tài)由碰撞轉(zhuǎn)變?yōu)椴慌鲎?,且所?D模型的當(dāng)前透明度小于初始透明度時(shí),增大所述3D模型的透明度。
[0017]本優(yōu)選方案,由于所述虛擬攝像機(jī)單元是跟隨所述目標(biāo)模型移動(dòng)的,因而,所述連接線的位置也是動(dòng)態(tài)變化的,則可能所述連接線本來(lái)與一個(gè)3D模型本來(lái)是發(fā)生碰撞的,在所述目標(biāo)模型移動(dòng)后,所述連接線與該3D模型變?yōu)椴话l(fā)生碰撞,此時(shí),通過(guò)所述透明度還原單元對(duì)這個(gè)3D模型的透明度進(jìn)行還原,保證所述3D場(chǎng)景的真實(shí)性,提高了用戶的游戲體驗(yàn)和視覺(jué)觀感。
[0018]本發(fā)明還提供一種3D場(chǎng)景的繪制方法,包括如下步驟:
[0019]虛擬攝像機(jī)單元基于設(shè)定的焦點(diǎn)獲取3D場(chǎng)景的待繪制區(qū)域;
[0020]所述碰撞計(jì)數(shù)單元計(jì)算所述虛擬攝像機(jī)單元的鏡頭與所述焦點(diǎn)形成的連接線與所述3D場(chǎng)景中的3D模型的碰撞次數(shù),并在所述碰撞次數(shù)為奇數(shù)次時(shí),發(fā)送第一指令至所述移動(dòng)單元,在所述碰撞次數(shù)為非零的偶數(shù)次時(shí),發(fā)送第二指令至所述透明度處理單元;
[0021]所述移動(dòng)單元響應(yīng)于所述第一指令,朝靠近所述焦點(diǎn)的方向移動(dòng)所述虛擬攝像機(jī)單元;
[0022]所述透明度處理單元響應(yīng)于所述第二指令,獲取與所述連接線發(fā)生碰撞的3D模型的當(dāng)前透明度,并在所述當(dāng)前透明度大于預(yù)設(shè)的目標(biāo)透明度時(shí),減小所述3D模型的透明度;
[0023]所述繪制單元對(duì)所述虛擬攝像機(jī)單元能夠獲取到的待繪制區(qū)域進(jìn)行繪制,以生成相應(yīng)的畫面幀。
[0024]優(yōu)選地,所述3D模型包括至少一個(gè)面片;
[0025]則所述碰撞計(jì)數(shù)單元計(jì)算所述虛擬攝像機(jī)單元的鏡頭與所述焦點(diǎn)形成的連接線與所述3D場(chǎng)景中的3D模型的碰撞次數(shù),具體為:
[0026]所述碰撞計(jì)數(shù)單元計(jì)算計(jì)算所述虛擬攝像機(jī)單元的鏡頭與所述焦點(diǎn)形成的連接線與所述3D場(chǎng)景中的各個(gè)3D模型的面片的碰撞次數(shù)。
[0027]優(yōu)選地,在每個(gè)3D模型外部還設(shè)置有一個(gè)包圍所述3D模型的包圍盒;
[0028]則所述碰撞計(jì)數(shù)單元計(jì)算所述虛擬攝像機(jī)單元的鏡頭與所述焦點(diǎn)形成的連接線與所述3D場(chǎng)景中的3D模型的碰撞次數(shù),具體為:
[0029]所述碰撞計(jì)數(shù)單元計(jì)算計(jì)算所述虛擬攝像機(jī)單元的鏡頭與所述焦點(diǎn)形成的連接線與所述3D場(chǎng)景中的各個(gè)3D模型的包圍盒表面的碰撞次數(shù)。
[0030]優(yōu)選地,所述移動(dòng)單元響應(yīng)所述第一指令,朝靠近所述焦點(diǎn)的方向移動(dòng)所述虛擬攝像機(jī)單元,具體包括:
[0031]所述移動(dòng)單元響應(yīng)所述第一指令,并根據(jù)所述鏡頭與離所述鏡頭最近且與所述連接線發(fā)生碰撞的面片的距離生成每幀的移動(dòng)步長(zhǎng);
[0032]所述移動(dòng)單元在每幀刷新時(shí),根據(jù)所述移動(dòng)步長(zhǎng)沿所述連接線朝靠近所述焦點(diǎn)的方向移動(dòng)所述虛擬攝像機(jī)單元。
[0033]優(yōu)選地,所述移動(dòng)單元響應(yīng)所述第一指令,朝靠近所述焦點(diǎn)的方向移動(dòng)所述虛擬攝像機(jī)單元,具體包括:
[0034]所述移動(dòng)單元響應(yīng)所述第一指令,并根據(jù)所述鏡頭與離所述鏡頭最近且與所述連接線發(fā)生碰撞的包圍盒表面的距離生成每幀的移動(dòng)步長(zhǎng);
[0035]所述移動(dòng)單元在每幀刷新時(shí),根據(jù)所述移動(dòng)步長(zhǎng)沿所述連接線朝靠近所述焦點(diǎn)的方向移動(dòng)所述虛擬攝像機(jī)單元。
[00