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