基于osg三維渲染引擎預(yù)處理的三維場(chǎng)景生成方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001 ]本發(fā)明涉及三維虛擬仿真領(lǐng)域,具體涉及一種基于OSG三維渲染引擎預(yù)處理的三維場(chǎng)景生成方法及裝置。
【背景技術(shù)】
[0002]在三維虛擬仿真技術(shù)中,三維渲染引擎為實(shí)現(xiàn)三維場(chǎng)景圖形的結(jié)構(gòu)原理和繪制提供了一系列的操作接口,包括模型的加載接口、三維空間及實(shí)現(xiàn)模型的裝配、渲染、優(yōu)化和控制功能。三維渲染引擎在渲染過(guò)程中采用渲染流水線方式,類似于工程裝配線。
[0003]0SG(0pen Scene Graph)是一種高性能的開(kāi)源三維圖形引擎,基于修改的LGPL協(xié)議免費(fèi)發(fā)布,普遍應(yīng)用在飛行仿真、游戲、虛擬現(xiàn)實(shí)、科學(xué)計(jì)算可視化領(lǐng)域,具有較高的圖形處理性能,該引擎提供在OpenGL之上的面向?qū)ο蟮目蚣?,避免過(guò)于底層的開(kāi)發(fā)工作,同時(shí)具有豐富的插件和接口,使系統(tǒng)的應(yīng)用和開(kāi)發(fā)具有很高的靈活性。
[0004]當(dāng)前的三維軟件都是基于開(kāi)源或商業(yè)三維引擎進(jìn)行開(kāi)發(fā),通過(guò)這些引擎可實(shí)現(xiàn)3D模型文件加載、紋理字體支持、細(xì)節(jié)層次(LOD)控制、多線程數(shù)據(jù)分頁(yè)等功能。在三維軟件開(kāi)發(fā)過(guò)程中,開(kāi)發(fā)者常采用默認(rèn)的三維渲染引擎的流水管線技術(shù)(比如采用OSG作為三維引擎),通過(guò)三維引擎自身的渲染過(guò)程以及預(yù)設(shè)置參數(shù)進(jìn)行三維模型的加載控制。對(duì)于一個(gè)沒(méi)有特殊設(shè)計(jì)要求的場(chǎng)景來(lái)說(shuō),比如在僅采用單個(gè)模型、無(wú)需物理碰撞、無(wú)復(fù)雜的界面要求和渲染要求的場(chǎng)合,默認(rèn)的渲染引擎能夠很好地完成工作;但對(duì)于需要顯示背景圖片、前景界面、真實(shí)感高的場(chǎng)景,以及需要進(jìn)行碰撞檢測(cè)場(chǎng)合,采用默認(rèn)渲染引擎管線則不能很好完成相關(guān)工作。若僅在默認(rèn)引擎基礎(chǔ)上,采用物理碰撞、多攝像機(jī)等方式,對(duì)于單模型場(chǎng)景可很好解決上述特殊設(shè)計(jì)的問(wèn)題,但對(duì)于需要進(jìn)行多個(gè)模型融合、且體現(xiàn)真實(shí)度高的場(chǎng)合,則無(wú)法適應(yīng)需求。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的目的在于,為解決多模型快速融合、復(fù)雜界面、物理碰撞、真實(shí)感高模型紋理需求的技術(shù)問(wèn)題,提供一種基于OSG三維渲染引擎預(yù)處理的三維場(chǎng)景生成方法及裝置。
[0006]為實(shí)現(xiàn)上述目的,本發(fā)明提供的一種基于OSG三維渲染引擎預(yù)處理的三維場(chǎng)景生成方法,該方法具體包括:
[0007]步驟I)對(duì)三維場(chǎng)景渲染的模型列表以及狀態(tài)參數(shù)進(jìn)行自定義;
[0008]步驟2)初始化OSG三維引擎的基本對(duì)象,包括:模型管理對(duì)象、場(chǎng)景視圖對(duì)象、三維背景攝像機(jī)和HUD攝像機(jī);所述的模型管理對(duì)象作為場(chǎng)景根節(jié)點(diǎn),用于管理場(chǎng)景中的所有對(duì)象;所述的場(chǎng)景視圖對(duì)象用于處理各種事件消息;所述的三維背景攝像機(jī)用于管理三維場(chǎng)景的背景內(nèi)容;所述的HUD攝像機(jī)用于顯示用戶交互界面;
[0009]步驟3)加載需渲染的多個(gè)模型,存入不同的模型管理對(duì)象中,根據(jù)狀態(tài)參數(shù)設(shè)置不同模型的預(yù)處理和后處理渲染狀態(tài),并設(shè)置物理引擎,建立物理引擎與模型之間的關(guān)聯(lián)關(guān)系;
[0010]步驟4)利用OSG三維引擎本身提供的場(chǎng)景渲染流程更新并顯示三維場(chǎng)景。
[0011]作為上述技術(shù)方案的進(jìn)一步改進(jìn),所述步驟I)中自定義的內(nèi)容包括:不同清染效果的模型列表分類定義和模型的多種渲染參數(shù)定義;
[0012]作為上述技術(shù)方案的進(jìn)一步改進(jìn),所述步驟2)中的HUD攝像機(jī)采用QT二維界面庫(kù),為實(shí)現(xiàn)復(fù)雜的界面效果。
[0013]作為上述技術(shù)方案的進(jìn)一步改進(jìn),所述步驟3)中建立物理引擎與模型之間的關(guān)聯(lián)關(guān)系的過(guò)程包括:在第一次加載模型時(shí),將所有關(guān)聯(lián)模型的數(shù)據(jù)、參數(shù)進(jìn)行序列化到文件,并在第二次加載模型時(shí),通過(guò)從文件反序列化讀取數(shù)據(jù),以加速物理引擎的關(guān)聯(lián)過(guò)程,提高加入引擎后的初始化效率。通過(guò)采用序列化以及反序列化方法,可使模型對(duì)象與物理引擎之間的關(guān)聯(lián)速度加快,關(guān)聯(lián)速度為從原始的3-5分鐘提尚到10-20秒,從而大大提尚關(guān)聯(lián)效率,優(yōu)化用戶的體驗(yàn)效果。
[0014]作為上述技術(shù)方案的進(jìn)一步改進(jìn),所述的場(chǎng)景渲染流程為:根據(jù)三維渲染引擎的內(nèi)置裁剪方法對(duì)場(chǎng)景中顯示的模型進(jìn)行控制,由裁剪訪問(wèn)器遍歷訪問(wèn)場(chǎng)景節(jié)點(diǎn)樹(shù),并篩選和構(gòu)建狀態(tài)樹(shù),形成狀態(tài)樹(shù)中的渲染葉,利用狀態(tài)機(jī)對(duì)狀態(tài)樹(shù)進(jìn)行遍歷,收集渲染葉的渲染狀態(tài),同時(shí)利用狀態(tài)機(jī)執(zhí)行渲染葉具體的渲染過(guò)程。
[0015]本發(fā)明還提供了一種基于OSG三維渲染引擎預(yù)處理的裝置,該裝置包括:初始化模塊、加載模塊和顯示模塊;所述的初始化模塊用于對(duì)OSG三維渲染引擎預(yù)處理過(guò)程中使用的狀態(tài)參數(shù)內(nèi)容進(jìn)行自定義,以及對(duì)OSG三維渲染引擎預(yù)處理過(guò)程中使用的場(chǎng)景根對(duì)象、視圖對(duì)象、攝像機(jī)對(duì)象內(nèi)容進(jìn)行初始化,并初始化各對(duì)象的基本參數(shù);
[0016]所述的加載模塊用于對(duì)模型、狀態(tài)參數(shù)、物理引擎內(nèi)容進(jìn)行加載,并在加載完成后由場(chǎng)景根對(duì)象、視圖對(duì)象、攝像機(jī)對(duì)象進(jìn)行分類管理;
[0017]所述的顯示模塊用于對(duì)更新的三維場(chǎng)景進(jìn)行顯示。
[0018]本發(fā)明的一種基于OSG三維渲染引擎預(yù)處理的三維場(chǎng)景生成方法及裝置優(yōu)點(diǎn)在于:
[0019]通過(guò)采用OSG作為基礎(chǔ)三維引擎、QT等界面庫(kù)作為用戶交互界面引擎,并依次進(jìn)行初始化基礎(chǔ)對(duì)象、加載模型對(duì)象、加載模型相關(guān)渲染狀態(tài)參數(shù)、加載物理引擎后,利用預(yù)處理得到的三維渲染引擎更新三維場(chǎng)景,實(shí)現(xiàn)了復(fù)雜三維場(chǎng)景要求、三維真實(shí)感要求的三維應(yīng)用場(chǎng)合,從而滿足了三維場(chǎng)景復(fù)雜渲染層次(包括三維背景渲染、主場(chǎng)景渲染、用戶界面界面渲染、輔助窗口渲染等顯示層次)、渲染真實(shí)感(通過(guò)著色器、材質(zhì)、紋理等內(nèi)容動(dòng)態(tài)設(shè)置)、快速的物理碰撞加載(序列化物理引擎關(guān)聯(lián)對(duì)象)等需求??s短了與物理引擎關(guān)聯(lián)的時(shí)間,提高了場(chǎng)景、模型的渲染效果、渲染效率,豐富了人為進(jìn)行渲染流程控制的手段。
【附圖說(shuō)明】
[0020]圖1是本發(fā)明實(shí)施例中的一種基于OSG三維渲染引擎預(yù)處理的三維場(chǎng)景生成方法流程圖。
[0021]圖2是本發(fā)明實(shí)施例中的場(chǎng)景樹(shù)組織結(jié)構(gòu)的示意圖。
[0022]圖3是本發(fā)明實(shí)施例中的加載流程的示意圖。
[0023]圖4是本發(fā)明實(shí)施例中的OSG場(chǎng)景渲染流程的示意圖。
[0024]圖5是本發(fā)明實(shí)施例的一種基于OSG三維渲染引擎預(yù)處理的裝置結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0025]下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明所述的一種基于OSG三維渲染引擎預(yù)處理的三維場(chǎng)景方法及裝置進(jìn)行詳細(xì)說(shuō)明。
[0026]如圖1所示,本發(fā)明的一種基于OSG三維渲染引擎預(yù)處理的三維場(chǎng)景生成方法,包括如下處理步驟:
[0027]步驟I)對(duì)三維場(chǎng)景渲染的模型列表以及狀態(tài)參數(shù)進(jìn)行自定義;
[0028]步驟2)初始化OSG三維引擎的基本對(duì)象,包括:模型管理對(duì)象、場(chǎng)景視圖對(duì)象、三維背景攝像機(jī)和HUD攝像機(jī);所述的模型管理對(duì)象作為場(chǎng)景根節(jié)點(diǎn),用于管理場(chǎng)景中的所有對(duì)象;所述的場(chǎng)景視圖對(duì)象用于處理各種事件消息;所述的三維背景攝像機(jī)用于管理三維場(chǎng)景的背景內(nèi)容;所述的HUD攝像機(jī)用于顯示用戶交互界面;
[0029]步驟3)加載需渲染的多個(gè)模型,存入不同的模型管理對(duì)象中,根據(jù)狀態(tài)參數(shù)設(shè)置不同模型的預(yù)處理和后處理渲染狀態(tài),并設(shè)置物理引擎,建立物理引擎與模型之間的關(guān)聯(lián)關(guān)系;
[0030]步驟4)利用OSG三維引擎本身提供的場(chǎng)景渲染流程更新并顯示三維場(chǎng)景。
[0031]基于上述的預(yù)處理方法,在步驟I)中,自定義的內(nèi)容可包括:對(duì)不同三維場(chǎng)景渲染效果的模型列表進(jìn)行自定義和對(duì)模型的多種渲染參數(shù)進(jìn)行自定義。
[0032]在步驟2)中,所述的HUD攝像機(jī)為實(shí)現(xiàn)復(fù)雜的界面效果,可采用QT等二維界面庫(kù)。
[0033]在步驟3)中,對(duì)自定義的模型進(jìn)行加載,加載完成后,存入不同模型管理對(duì)象,不同模型管理對(duì)象采用不同渲染狀態(tài);并對(duì)模型的多種渲染狀態(tài)參數(shù)進(jìn)行加載,包括:著色器、材質(zhì)、紋理、輸入緩存等多種參數(shù)類型,將相關(guān)參數(shù)類型關(guān)聯(lián)到不同模型對(duì)象。
[0034]在建立物理引擎與模型之間的關(guān)聯(lián)關(guān)系過(guò)程中,為加速關(guān)系的建立過(guò)程,可通過(guò)序列化以及反序列化方法提高模型與物理引擎之間的關(guān)聯(lián)效率。
[0035]在步驟4)中,可利用OSG三維引擎本身提供的場(chǎng)景樹(shù)、狀態(tài)樹(shù)和狀態(tài)機(jī)更新顯示三維場(chǎng)景。
[0036]下面給出了三維場(chǎng)景渲染的模型列表的自定義樣式,以下對(duì)該樣式進(jìn)行說(shuō)明:
[0037]〈ground〉表示地表的模型列表,一般包括大地等模型內(nèi)容,對(duì)于地表模型列表,該模型列表需增加物理碰撞等狀態(tài)。
[0038]〈objects〉表示對(duì)象模型列表,一般包括房屋、房屋中的物體等內(nèi)容,對(duì)于對(duì)象模型列表,該模型列表需增加物理碰撞、AO陰影顯示等狀態(tài)。
[0039]〈misc〉表示雜項(xiàng)模型列表,一般為除大地、房屋、樹(shù)等對(duì)象的三維模型,對(duì)于對(duì)象模型列表,該模型列表一般不添加特殊的清染狀態(tài)。
[0040]〈effect〉表示關(guān)聯(lián)的自定義渲染狀態(tài)文件。
[0041 ]下面給出了多種三維渲染狀態(tài)參數(shù)的自定義樣式內(nèi)容,以下對(duì)該樣式進(jìn)行說(shuō)明:
[0042]〈shader〉表示可選用的著色器及其關(guān)聯(lián)的著色器文件,在三維引擎中,著色器包括多種類型,比如