本發明屬于計算機軟件領域,涉及一種虛擬現實軟件開放式開發系統及方法。
現有技術
虛擬現實(virtualreality)是一種計算機軟件模擬技術,以計算機軟件模擬真實世界的視覺和物理現象及其內在機理。
現有的虛擬現實開發平臺,如unity、unreal等,其開發及應用流程如附圖1所示,包括3d模型導入、帖圖渲染、編寫程序代碼、編譯生成可執行程序、安裝、使用、問題反饋、修改等環節。最終提交給用戶的主要是執行程序(exe文件)、函數庫,以及配套的3d模型數據及其貼圖。
從軟件結構上來說,所有被開發的功能算法、數據結構等全部都打包封裝在exe文件中,對應用程序的用戶是不可見的。因此,在上述開發流程中,用戶只參與軟件的使用和問題反饋兩個環節,其它全部由專業的軟件開發者完成。這種開發者與使用者分離的軟件開發與應用模式,具有開發與應用關系清晰、軟件功能一致性好的優點。
而在虛擬現實應用領域,行業用戶的需求往往是非常個性化的。例如工業產品的虛擬仿真培訓系統,每一款都需要進行個性化定制。而現有的開發模式下,用戶無法對軟件進行自主開發或修改,哪怕是一個簡單的功能需求發生變化,都需要找到專業的開發者來完成,并生成不同的執行程序(軟件版本)返回給用戶,導致對軟件個性化需求的響應速度慢、定制成本高、版本管理困難,阻礙了虛擬現實技術在各行業的推廣。
技術實現要素:
針對現有虛擬現實軟件開發方法存在的問題,我們提出并實現一種虛擬現實軟件開放式開發系統及其方法,旨在實現用戶可隨時隨地自行修改甚至開發虛擬現實軟件的功能。其技術方案如下。
本發明的一種虛擬現實軟件開放式開發系統包括:
編譯執行程序,對虛擬現實應用軟件的功能描述數據進行解讀,并根據其給出的邏輯和指令,調用3d模型、以及函數庫中的相關函數,完成對軟件功能的執行;
功能描述數據,以約定的協議,存貯某一虛擬現實應用軟件的所有功能描述,即所有功能所對應的算法、數據結構、調用函數的描述;
功能編輯器,用于編輯和生成所述的功能描述數據;
3d模型庫,包含3d模型和3d場景;
函數庫。
本發明的虛擬現實軟件開放式開發系統的開發方法包括如下步驟:
1)場景構建:導入3d模型,并進行貼圖渲染;
2)功能開發:使用功能編輯器,將所要開發的虛擬現實軟件功能的算法和數據結構編輯編寫為功能描述數據,在編寫過程中,隨時調用編譯執行程序,對功能描述數據進行解釋和執行,使用戶可實時查看開發效果,以便調試;功能描述數據編寫完成后,保存,
3)交付安裝:開發結束后,交付給用戶的是一個與具體應用軟件功能無關的編譯執行程序,與具體應用軟件局部相關的函數庫,與應用軟件完全相關的功能描述數據、3d場景。
4)軟件使用:用戶啟動編譯執行程序后,編譯執行程序按需讀取部分或全部功能描述數據,對其中的功能描述進行解讀和編譯,之后,按照解讀結果所給出的邏輯,調用3d模型,并從函數庫中調用功能描述數據中指定的函數,并執行其所描述的軟件功能;
5)軟件修改:當軟件功能需要修改時,直接使用功能編輯器修改功能描述數據并加以保存;啟動編譯執行程序后,重新載入修改后的功能描述數據,軟件的功能即相應發生改變,從而實現軟件功能開發的開放性,即任何人都可以隨時對軟件進行修改。
所述的與具體應用軟件局部相關的函數庫可以隨時擴展,擴展方法為:1)用戶采用通用的計算機程序開發出功能函數,然后在現有的計算機編譯環境中編譯生成(或添加到)函數庫;2)為該函數命名其對應的功能描述關鍵詞,并添加到功能描述數據詞庫中,并建立映射關系。
本發明的核心在于將應用軟件軟件的具體功能從可執行(exe)程序中分離出來,放到開放式的功能描述數據中,形成一個“組合工具”式的軟件開發和應用架構。即使用一個統一的編譯執行程序,搭配不同的功能描述數據,產生不同的軟件功能。其技術效果表現在:
1)任何用戶可在任何時間、任何地點通過編輯功能描述數據,對軟件功能進行修改而無需重新編譯,從而解決軟件個性化開發與應用的“最后一公里”問題,實現“千人千面”式的軟件個性化開發。
2)因為采用了統一的可執行程序,因此軟件的分發管理也變得更加簡單。用戶只需要安裝一個程序,通過下載不同的功能描述數據包,即可運行不同的軟件。而經過用戶自行修改的個性化功能數據包,則由用戶自行管理即可。
3)與可執行程序(exe文件)不同,功能描述數據數據具有非常好的開放性,便于隨時進行共享、引用、繼承、組合,因此更加有利于協同開發,實現隨時、隨地、人人的3a(anytime、anywhere、anybody)的開發模式。
附圖說明
圖1為現有虛擬現實軟件開發及應用流程;
圖2本發明涉及的虛擬現實開發及應用架構;
圖3本發明涉及的虛擬現實軟件開發及應用流程。
具體實施方式
本發明的核心思想,是將虛擬現實軟件中用于對功能進行表達的算法、數據結構等,以外部數據的方式,從exe程序中分離出來,而非像現有的應用程序一樣,封裝在exe程序中。其開發及應用架構如圖2所示。
除了常規的3d模型庫、函數庫之外,其中的關鍵構件及其實現方案是:
1)功能描述數據:可以是一組數據文件(如各類文本或二進制文件),也可以是數據庫中的數據包。它以約定的協議,存貯了某個虛擬現實應用軟件的所有功能描述,即所有功能所對應的算法、數據結構、調用函數的描述,其作用類似于通常軟件開發架構中的源代碼。功能描述數據是由功能編輯器來進行編寫開發的。
2)編譯執行程序:是一個統一的、與具體的應用軟件無關的可執行(exe)程序,負責按約定的協議,對某一個應用軟件的功能描述數據進行解讀,并根據其給出的邏輯和指令,調用3d模型,以及函數庫中的相關函數,完成對軟件功能的執行。與通常的軟件開發及編譯工具所不同的是,本發明涉及的編譯執行程序相當于“編譯器+執行程序”,并且是在某一應用程序運行時才對相應的功能描述數據文件進行編譯和執行。
3)功能編輯器:用于編輯和生成功能描述數據。當功能描述數據是文本文件時,軟件功能編輯器就相當于一個專用的文本編輯器,理論上甚至可以直接使用常規的文本編輯器。在開發過程中,功能編輯器同步調用編譯執行程序,以便隨時查看開發效果,用于開發調試。
基于這一架構,本發明提出的虛擬現實開發與應用流程如圖3所示。
1)場景構建:開發者需要導入3d模型,并進行貼圖渲染。
2)功能開發:開發者使用功能編輯器,將所要開發的虛擬現實軟件功能的算法和數據結構編輯編寫為功能描述數據,編寫過程與通常的計算機程序編寫方式相似。在編寫過程中,隨時調用編譯執行程序,對功能描述數據進行解釋和執行,使用戶可實時查看開發效果,以便調試。功能描述數據編寫完成后,只需要保存即可,而不需要進行編譯生成可執行文件。
3)交付安裝:開發結束后,交付給用戶的是一個與具體應用軟件無關的、統一的編譯執行程序(exe文件),與具體應用軟件局部相關的函數庫(可能有應用軟件專用的函數庫),與應用軟件完全相關的功能描述數據、3d場景。
4)軟件使用:用戶啟動編譯執行程序后,它立即按需讀取(節省運算開銷)部分或全部功能描述數據,對其中的功能描述進行解讀和編譯,解讀的內容包括運算邏輯(算法)、變量、函數等。之后,按照解讀結果所給出的邏輯,調用3d模型,并從函數庫中調用功能描述數據中指定的函數,并執行其所描述的軟件功能。例如,在一個虛擬現實場景中有一個虛擬的電燈3d模型,當我們用鼠標左鍵點擊它時,電燈打開。這個功能可描述為:ifmouse_left_click(light)thenswitch(light)。在這句描述中,if…then…是邏輯(算法),mouse_left_click和switch是函數庫中相關函數對應的關鍵詞,而light則是電燈的識別名和狀態變量(初始值可設為0,表示關閉)。編譯執行程序首先對這個描述中的邏輯進行解讀,而后調用mous_left_click指向的函數,監控鼠標行為。當探測到鼠標點擊light所代表的對象(電燈)時,立即調用并執行switch指向的開燈函數,使該函數中的參數light所指向的對象(電燈)的3d模型呈現打開(高亮)的效果,同時將light狀態值切換為1,表示打開的狀態。
5)軟件修改:由于應用軟件開發的結果是以功能描述數據存放的,不需要事先編譯生成可執行程序(exe文件)。因此,當軟件功能需要修改時,即使是應用軟件的用戶也可直接使用功能編輯器修改功能描述數據并加以保存。啟動編譯執行程序后,重新載入修改后的功能描述數據,軟件的功能即相應發生改變,從而實現軟件功能開發的開放性,即任何人都可以隨時對軟件進行修改。
在本發明中,無論是什么虛擬現實軟件,其運行都是通過編譯執行程序進行的。也就是說,各種不同的虛擬現實軟件采用的是一個統一的可執行程序,是功能描述數據的不同造成了不同軟件的功能差異。
根據不同的開發需求,功能描述數據可以采用不同的格式,如文本、電子表、數據庫等,彼此之間通過格式轉換器相互轉化。例如,當我們需要通過網絡進行協同開發時,可將功能描述數據以數據庫的方式進行存貯和管理,而在網絡斷開或單機版開發時,功能描述文件則可能就是本地終端上的文本文件。
3d模型庫可以隨時擴展,其實現方法為:1)用戶采用第三方建模工具完成3d模型并進行渲染。2)將3d模型以通用格式(如.fbx)存放在指定的文件夾或數據庫中,并填寫模型描述表。3)根據模型描述表,由系統自動修改3d模型庫的索引目錄。
函數庫有兩種基本的創建方式,1)基于opengl或c3d等圖形底層自行開發。2)直接采用現有的第三方虛擬現實引擎函數庫,實現跨引擎開發。同時,函數庫也可以隨時擴展,其步驟是:1)用戶采用通用的計算機程序開發出功能函數,然后在現有的計算機編譯環境中編譯生成(或添加到)函數庫。2)為該函數命名其對應的功能描述關鍵詞,并添加到功能描述數據詞庫中,并建立映射(指向)關系。