0042]請參閱圖3,本發(fā)明實施例提供一種3D場景的繪制系統(tǒng),所述繪制系統(tǒng)100包括虛擬攝像機單元10、相交檢測單元20、透明度處理單元30及繪制單元40,其中:
[0043]所述虛擬攝像機單元10,用于基于設(shè)定的視角獲取3D場景的待繪制區(qū)域。
[0044]在本發(fā)明實施例中,所述虛擬攝像機單元10可布置于3D場景中,并基于設(shè)定的視角獲取所述3D場景的待繪制區(qū)域。其中,在進行3D場景的繪制時,只有位于所述待繪制區(qū)域內(nèi)的場景元素(包括3D模型、地形、天空盒等)才會被繪制。如圖1所示,類似于現(xiàn)實中的攝像機,所述虛擬攝像機單元10具有圖像采集視野。
[0045]具體地,所述虛擬攝像機單元10在所述3D場景中預置一個近平面11和遠平面12,所述待繪制區(qū)域為以所述近平面11和所述遠平面12的所有頂點為頂點構(gòu)成的區(qū)域,例如,當所述近平面11和所述遠平面12為互相平行的矩形平面時,則所述待繪制區(qū)域為一個梯形臺區(qū)域。
[0046]所述相交檢測單元20,用于在檢測到預置于所述3D場景中的3D模型與所述待繪制區(qū)域的任一個邊緣面發(fā)生相交時,確認所述3D模型與所述待繪制區(qū)域相交,生成發(fā)送至所述透明度處理單元的處理請求。
[0047]在本發(fā)明實施例中,由于只有位于所述待繪制區(qū)域內(nèi)的3D模型才會被繪制,因而當一個3D模型與所述待繪制區(qū)域的任一個邊緣面發(fā)生相交時,則表明這個3D模型的一部分位于待繪制區(qū)域內(nèi),而其余部分位于待繪制區(qū)域外。此時,位于待繪制區(qū)域內(nèi)的這部分將被繪制,而位于待繪制區(qū)域外的部分將不會被繪制。此時,就可能會出現(xiàn)如圖2所示的模型碎片的情況??梢钥吹?,由于所述3D模型的一部位未被繪制,因而在畫面就明顯地顯示出不完整的3D模型,無論是用戶體驗還是視覺觀感都不佳。
[0048]在本發(fā)明實施例中,所述相交檢測單元20將檢測預置于所述3D場景中的3D模型是否與所述待繪制區(qū)域的邊緣面發(fā)生相交,具體地,在本發(fā)明實施例中,所述3D場景中的3D模型均是由多個面片構(gòu)成的,其中,每個面片可由3個頂點構(gòu)成。當所述相交檢測單元20檢測到組成所述3D模型的頂點位于任一個邊緣面的兩側(cè)時,則可確認所述3D模型與所述待繪制區(qū)域相交,并生成發(fā)送至所述透明度處理單元30的處理請求。
[0049]所述透明度處理單元30,用于響應所述處理請求,獲取所述3D模型的透明度,并在所述3D模型的當前透明度大于預設(shè)的目標透明度時,減小所述3D模型的透明度。
[0050]在本發(fā)明實施例中,所述透明度處理單元30響應所述處理請求,并可通過對所述3D模型的透明度進行處理,使之透明度降低至目標透明度(本發(fā)明實施例中,3D模型的透明度的值越大,則其本身越不透明,如當所述透明度為255時,則表示這個3D模型完全不透明,而當透明度的值為0時,則這個3D模型完全透明且不可見),從而在繪制得到的畫面幀中,不會明顯的顯示出模型碎片的視覺效應。如圖4所示,由于被繪制的3D模型的透明度已經(jīng)降低,其與未被繪制的那部分在視覺對比上不會如圖2顯示的那么明顯,因而即使所述3D模型在所述待繪制區(qū)域外的那部分還是未被繪制,但在整體視覺體驗上有了改進。
[0051]在本發(fā)明實施例中,所述透明度處理單元30可以直接在一幀畫面刷新時將所述3D模型的透明度調(diào)整到目標透明度。例如,假設(shè)所述3D模型的初始透明度為255,目標透明度為100,則可在一幀畫面刷新的時候,通過改變透明通道的透明值或者做alpha融合,將帶透明度的所述3D模型在光柵化之后將顏色的rgb值乘以透明度后疊加到背景顏色上,以直接將所述3D模型的透明度從255調(diào)整到100。
[0052]當然,更好的做法是在每幀畫面刷新時將透明度減去一個固定的值,從而在經(jīng)過一段時間后,使得所述3D模型的透明度達到目標透明度。例如,在每幀畫面刷新時,所述透明度處理單元30將所述3D模型的透明度的值減小16,則在10幀后,所述3D模型的透明度變?yōu)?5,小于所述目標透明度。這種逐幀調(diào)節(jié)的方法可保持畫面上的過渡變化,避免透明度突然變化導致的畫面閃變。
[0053]所述繪制單元40,用于對所述虛擬攝像機單元獲取的待繪制區(qū)域進行繪制,生成相應的畫面幀。
[0054]在本發(fā)明實施例中,所述繪制單元40對所述待繪制區(qū)域內(nèi)的3D模型進行繪制,例如,對所述待繪制區(qū)域內(nèi)的3D模型通過幾何變換,紋理映射,貼圖采樣等技術(shù)進行繪制后,生成相應的畫面幀,并將這些畫面幀發(fā)送至顯示設(shè)備,以進行顯示。當然,在繪制的時候,還可能需要對待繪制區(qū)域的其他場景組件進行繪制,本發(fā)明不做贅述。
[0055]本發(fā)明實施例提供的3D場景的繪制系統(tǒng)100,通過所述透明度處理單元30對與所述待繪制區(qū)域的邊緣面發(fā)生相交的3D模型的透明度進行處理,使之透明度降低,從而在繪制得到的畫面幀中,不會明顯的顯示出模型碎片和模型破碎的效應,避免了用戶的視線過分關(guān)注到這些模型碎片或不完整模型,提高了用戶的游戲體驗和視覺體驗。
[0056]需要說明的是,上述實施例中,由于所述待繪制區(qū)域的近平面是離用戶的觀測最近的平面,因而如果與近平面相交的3D模型出現(xiàn)碎片時(只有與近平面相交的3D模型在繪制后才會出現(xiàn)碎片,與其他邊緣面相交的3D模型則會只顯示一部分,如只顯示3D模型的上半身),會更受到用戶視線的關(guān)注,從而帶來不好的視覺體驗。如果考慮到提高計算和處理的效率,所述相交檢測單元20可選擇只檢測3D模型是否與所述近平面發(fā)生相交,而不檢測所述待繪制區(qū)域的其他邊緣面。
[0057]為進一步對本發(fā)明的方案進行更詳細的說明,下文對本發(fā)明的一些優(yōu)選實施例進行具體描述或舉例說明:
[0058]—、針對所述相交檢測單元20的優(yōu)選實施例。
[0059]在本發(fā)明實施例中,如何快速確定3D模型與所述待繪制區(qū)域的邊緣面發(fā)生相交是需要考慮的問題。由于所述3D模型形狀各異且不規(guī)則,組成所述3D模型的頂點的數(shù)量可能非常多,因而檢測所述3D模型頂點是否位于邊緣面的兩側(cè)會比較復雜。一般來說,在每個3D模型外部均設(shè)置有一個包圍所述3D模型的包圍盒,這個包圍盒可為長方體、正方體、圓形獲取其他多邊形體等。由于所述包圍盒的形狀相對所述3D模型規(guī)則,且所述包圍盒的結(jié)構(gòu)也相對比較簡單,因而檢測所述包圍盒的頂點是否位于邊緣面的兩側(cè)將有更快的處理效率。
[0060]具體地,在一個優(yōu)選實施例中,對于包圍盒的結(jié)構(gòu)比較簡單的情況,所述相交檢測單元20可具體用于,當檢測到預置于所述3D場景中的3D模型的包圍盒的頂點分別位于所述待繪制區(qū)域的任一個邊緣面的兩側(cè)時,確認所述3D模型與所述待繪制區(qū)域相交,生成發(fā)送至所述透明度處理單元30的處理請求。
[0061]此外,對于一個包圍所述3D模型的包圍盒,也可以給它設(shè)定一個預定義半徑,那么所述相交檢測單元20只要確定所述3D場景中的3D模型的包圍盒的中心到所述待繪制區(qū)域的任一邊緣面的距離小于所述包圍盒的預定義半徑時,就可以確認所述3D模型與所述待繪制區(qū)域相交。這種方法適用于形狀是球形或接近球形的包圍盒,也可適用于結(jié)構(gòu)比較復雜的包圍盒,其可獲得較快的處理速度。
[0062]二、針對透明度還原的優(yōu)選實施例。
[0063]在本發(fā)明實施例中,由于所述虛擬攝像機單元10是跟隨目標模型(所述虛擬攝像機單元10的焦點鎖定的目標)移動的,因而,所述待繪制區(qū)域也是動態(tài)變化的,則可能所述待繪制區(qū)域的邊緣面與一個3D模型本來是相交的,在所述目標模型移動后,所述待繪制區(qū)域的邊緣面與該3D模型變?yōu)椴幌嘟?,此時,需對這個3D模型的透明度進行還原,以保證所述3D場景的真實性。
[0064]具體地,請一并參閱圖5,為了實現(xiàn)上述技術(shù)方案,所述繪制系統(tǒng)100還包括:
[0065]透明度還原單元50,用于在確定一個3D模型與所述待繪制區(qū)域的相交狀態(tài)由相交轉(zhuǎn)變?yōu)椴幌嘟?,且所?D模型的當前透明度小于初始透明度時,增大所述3D模型的透明度。
[0066]在本發(fā)明實施例中,所述透明度還原單元50可對每一個處于相交的3D模型進行標記,并實時檢測其相交狀態(tài)是否發(fā)生變化,若發(fā)生了變化(由相交轉(zhuǎn)變?yōu)椴幌嘟?,則所述透明度還原單元50判斷其當前透明度是否小于初始透明度,若是,則增大其透明度,直至等于其初始透明度,即完成了透明度的還原。
[0067]請參閱圖6,圖6是本發(fā)明實施例提供的3D場景的繪制方法的流程示意圖。其至少包括:
[0068]S101,虛擬攝像機單元基于設(shè)定的視角獲取3D場景的待繪制區(qū)域。
[0069]S102,相交檢測單元在檢測到預置于所述3D場景中的3D模型與所述待繪制區(qū)域的任一個邊緣面發(fā)生相交時,確認所述3D模型與所述待繪制區(qū)域相交,生成發(fā)送至透明度處理單元的處理請求。
[0070]S103,所述透明度處理單元響應所述處理請求,獲取所述3D模型的透明度,并在所述3D模型的當前透明度大于預設(shè)的目標透明度時,減小所述3D模型的透明度。
[0071]S104,繪制單元對所述虛擬攝像機單元獲取的待繪制區(qū)域進行繪制,生成相應的畫面幀。
[0072]本發(fā)明實施例提供的3D場景的繪制方法,通過所述透明度處理單元對與所述