室内外实时一体化建模
摘要
近年來,隨著電子地圖逐漸開始從二維向三維轉變,實時搭建室內外一體化建筑物模型對實現智慧城市中的室內導航服務具有重要的意義。在以往的三維模型構建中,主要是通過三角格網、高度場或BSP等方式,然而它們都存在成本太高,僅為表面表示方式,不易修改或適用場合有限等問題。本文采用了體素-三維建模方式,結合OpenGL圖形接口,利用八叉樹數據結構,更加美觀高效的并且實時的構建三維模型。選擇AutoCad中的平面圖作為建模對象,通過添加高度,紋理等屬性構建出三維模型,再對模型表面以及內部先后進行體素化。本研究中的體素-三維建模方式還可以為醫學,地質學等構建三維模型,進行更加專業性的研究。
關鍵詞:三維建模;體素;實時;
Abstract
In recent years, as electronic maps gradually begin to change from two-dimensional to three-dimensional, real-time building of indoor and outdoor integrated building models is of great significance for realizing indoor navigation services in smart cities. In the past three-dimensional model construction, mainly through the triangle grid, height field or BSP, but they all have the cost too high, only the surface representation, difficult to modify or limited application occasions. This paper adopts the voxel-three-dimensional modeling method, combined with the OpenGL graphic interface, and utilizes the octree data structure to construct a three-dimensional model in a more beautiful and efficient manner and in real time. Select the floor plan in AutoCad as the modeling object, construct a 3D model by adding attributes such as height and texture, and then voxelize the surface of the model and the interior. The voxel-three-dimensional modeling method in this study can also construct three-dimensional models for medicine, geology, etc., and conduct more professional research.
Key words:3D modeling; voxel; real time;
目錄
第一章 緒論 4
1.1 選題背景及意義 4
1.2 國內外研究現狀 4
1.3 存在問題 4
1.4 研究內容及技術路線 5
1.4.1 研究內容 5
1.4.2 研究方法 5
1.4.3 技術路線 5
第二章 體素及其應用 5
2.1 體素的概念 5
2.2 體素的應用 6
第三章 數據結構與接口 7
3.1 數據結構 7
3.1.1 八叉樹的概念 7
3.1.2 八叉樹的建立 8
3.1.3 八叉樹的目的 9
3.2 接口 9
3.2.1 OpenGL的功能 9
3.2.2 OpenGL體系結構 10
第四章 算法實現 11
4.1 讀取dxf 11
4.2 場景 12
4.3 相機 13
4.4 渲染器 14
第五章 結論與展望 16
5.1 結論 16
5.2 展望 16
致謝 17
參考文獻 18
第一章 緒論
1.1 選題背景及意義
論文選題來源于現實生活,生活中大部分三維地圖都是通過三維格網方式實現的,然而它存在一定的缺陷性。本課題可以實現實時的室內外一體化建模,在室內導航方面有著很好的應用,尤其是我們的建模要采用的體素-三維建模,是現階段的軟件中應用很少的,它克服了之前存在的問題,并且做到了實時構建模型。所以我們的課題其實是使用了一個創新的思路,去做一個現階段很少見的應用。
1.2 國內外研究現狀
三維網格是合乎當代硬件的建模方式,也是較自由的建模方式,而且有成熟的數字創作工具如 3ds Max 和 Maya。但其缺點包括建模成本高、僅為表面表示方式(可能無法判斷一個任意點在其外還是其內)、不容易修改(尤其是在展開UV之后)、不容易做連續或離散級數的細致程度等。高度場和 BSP 的制作成本較網格低,而且較容易修改和實現 LOD,但其適用場合就非常局限。但是我們所采用的的體素-三維建模,在國內的應用很少見,國外比較火熱,比如比較火熱的游戲《我的世界(Minecraft)》,這款游戲就是應用的體素-三維建模。還有很多體素建模軟件MagicaVoxel,Q-Block,Sproxel,VoxelShop。
本課題在國內外最大的應用就是在醫學和地質建模上面,但是它們都是只能建立一個縮小版的模型,不能大范圍的建模,而我們的課題就是在嘗試體素-三維建模在大范圍的應用。
1.3 存在問題
本課題的最大困難有兩個,第一就是怎么進行壓縮體素,對建模所需的時間進行壓縮,使它可以更快的更接近實物的展現出來。第二就是怎么完成室內外一體的建模,因為我們不僅僅只做外觀,還要對室內的一系列物品進行建模。
1.4 研究內容及技術路線
1.4.1 研究內容
本課題的研究內容主要是實現三維可視化的顯示和操作,基于體素的制作方式帶來了各種創新,提高模型品質并控制制作成本。然而,顛覆傳統需要各方面的配合,模型設計、美術制作、實時性的編程都要注入新的思維,也必須輔以扎實的工具及制作流程。在引擎技術上,需要解決大規模世界的多分辨率建模、依 LOD 作資源串流、實時渲染、物理模擬、人工智能等各個方面的需求。
1.4.2 研究方法
本課題采用八叉樹體素建模方法,解析dxf文件中的三維模型,使用opengl將dxf中的三維模型加載紋理,并可視化,實現在三維模型內外的三維漫游。
最后,我們對模型不斷的訓練,使其可以完成對多種不同的復雜建筑的實時建模,并不斷的優化它的時間復雜度,使其可以更快的建立起最貼近實物的模型。
1.4.3 技術路線
本課題首先應用我們的算法對輸入的平面圖進行識別,然后在引用OpenGL對二維的平面圖體素化,再利用等值面提取解決細致程度及容量問題,以完成對初步模型的渲染。
第二章體素及其應用
2.1體素的概念
體素( voxel)是一個體積 像素,用來表示三維空間中規則格網的值。類似于二維空間中用來表示二維圖像數據的像素,是數據在三維空間分割上的最小單位。與二維像素類似,體素在空間中沒有絕對位置的概念,只有相對位置,意即在構成單一張體積影像的數據結構中的位置。從理論來說,最小的體素單元可以是立方體的,也可以是多面體的,或球體的模型等等,但由于多面體和球體的單元數據結構和處理相對復雜,目前應用比較廣泛的則是立方體的單元劃分,本文的討論也都是將最小體素單元視為立方體進行討論的。
2.2體素的應用
體素的應用主要包括醫學,游戲,地形三維建模的三個方面:
(1)在醫學方面,通常可以把CT影像和體素聯系到一起,搭建人體某各部位的體素模型,這樣可以把患者該部位的結構,更加直觀以及具體的展現給醫生。
(2)在游戲方面,一些游戲公司喜歡用體素來進行對游戲場景的搭建,這樣可以使畫面更加的逼真,給游戲玩家的真實感。還有另外一種體素沙盒游戲,例如現在游戲市場上非常火熱的“我的世界”,這款游戲它就給游戲玩家更高的自由度,以及一種全新的游戲體驗。
(3)在地形三維建模方面,體素技術目前在地形環境可視化方面應用還不廣泛,主要原因在于它需要較大的存儲空間,并且運算量相當大,但是渲染效果卻還比較理想。體素本身有著自身的特點,下面對基于體素模型的三維地形可視化方法與傳統的三角網格的表示法作一些比較:
1. 數據結構
基于三角形網格模型的地形可視化建模數據源采用的是 DEM 或 TIN 高程數據; 紋理采用的是衛片、航片或手工紋理等紋理數據。基于體素模型的地形可視化數據除了能表達傳統的高程數據外,還能表達包含地質屬性的地形“體”數據、點云數據等。
2. 表示方法
基于三角形網格模型的地形可視化的渲染加速研究已經取得了大量的成果,并在基于 GPU 算法的渲染上也取得了突破。基于體素的可視化是通過 Marching Mesh 算法實現的網格提取,也可以通過GPU 渲染加速。
3. 地形表達
基于三角形網格模型的地形可視化在表現復雜的地形,如拱形、突起、懸垂和洞穴往往比較困難,而這些地形的表達在地理現象的模擬方面則是必需的。基于體素的表達方法則可以通過 MarchingMesh 算法比較容易地實現復雜的地形。
4. 地理過程模擬
地理過程模擬方面,如表示水土侵蝕、風力侵蝕、山體滑坡等過程時,由于網格模型是表面可視化,因此很難實現這些地理過程的表達。而基于體素的地形可視化是“體”可視化,在表達地理過程模擬方面有著明顯的優勢。
5. 地形實時變形和編輯
網格模型的地形可視化在進行地形的實時編輯時,由于需要網格重構和三角形建模計算,效率低下,并且實現起來很困難。而基于體素模型的體數據結構,在實時地形編輯和地形變化時能夠得心應手。
第三章 數據結構與接口
3.1 數據結構
3.1.1 八叉樹的概念
八叉樹數據結構是由四叉樹進行擴展應用到三維現象的一種三維空間數據結構,它的基本思想是將三維區域劃分成三維柵格,每一個小正方體(稱為一個體元或體素)有一個或多個屬性數據。屬性相同的區域用大塊統一表示,而復雜區域用小塊表示,把大塊分為小塊時以一分為八的規則劃分。八叉樹的原理與數據結構中的二叉樹、四叉樹的原理基本相同。二叉排序樹可以實現應用在對一維序列的查找、四叉樹可以應用在GIS 二維平面上的對象索引,八叉樹結構也可以用做三維空間索引。如圖3.1和3.2所示。
圖3.1 八叉樹三維示意圖(圖源網絡)
圖3.2 八叉樹平面示意圖
3.1.2八叉樹的建立
空間對象可抽象為點、線、面、體四類。點對象直接存儲其坐標值即可,線對象可以看成是由一系列線段組成的,面對象和體對象可以看成是由一組三角平面組成的。假設所有空間對象都在[ Xmin,Ymin,Zmin,Xmax,Ymax,Zmax]范圍中。如圖3.3所示。
圖3.3 八叉樹空間索引(圖源網絡)
而想要建立八叉樹空間索引,有兩個基本問題要考慮:
一是在分解過程中應遵循的原則問題,這可以通過規定一個閥值K(K表示空間對象的個數)來解決,即只有當區域中空間對象的個數多于K個時,該區域需要進一步劃分;
二是分辨率的問題,即分解時允許達到的最小子區是多大的問題,這可以規定一個不再需要分割的正方體大小(最小正方體的邊長表示為n)。
在八叉樹中,每個結點都對應于一個特定位置上特定大小的立方體。在對結點進行分裂時,需要判斷結點中的空間對象是否完全包含在其子結點內;若是,將其放入該子結點內;若不是,則將其放入父結點內。點對象通過編碼可直接判斷;線對象只需判斷組成線對象的一系列線段的端點是否在同一子結點內;面對象(或體對象)只需判斷組成面對象(或體對象)的所有三角形的頂點是否在同一子結點內。
3.1.3八叉樹的目的
本課題將想要構建的三維場景抽象成一個巨大正方體,將其分割成八塊,每一子類都代表了場景中的一個房間,然后繼續進行分割,同樣,每一個子類代表了房間中的物品,例如桌子,花瓶等等,這樣可以完整的體現出場景中的每一個要素。這在室內導航中是十分重要的。另外,由于這種方法充分利用了形體在空上的相關性,因此,一般來說,它所占用的存貯空間要比三維體素陣列的少。八叉樹可以非常方便地實現有廣泛用途的集合運算(例如可以求兩個物體的并、交、差等運算),而這些恰是其它表示方法比較難以處理或者需要耗費許多計算資源的地方。不僅如此,由于這種方法的有序性及分層性,因而對顯示精度和速度的平衡、隱線和隱面的消除等,帶來了很大的方便,特別有用。
3.2接口
3.2.1OpenGL的功能
OpenGL是用于渲染2D、3D矢量圖形的跨語言、跨平臺的應用程序編程接口(API)。在OpenGL中允許視景對象用圖形方式表達,如由物體表面頂點坐標集合構成的幾何模型,這類圖形數據含有豐富的幾何信息,得到的仿真圖像能充分表達出其形體特征;而且在OpenGL中有針對三維坐標表示的頂點的幾何變換,通過該變換可使頂點在三維空間內進行平移和旋轉,對于由頂點的集合表達的物體則可以實現其在空間的各種運動。而且OpenGL通過光照處理能表達出物體的三維特性,其光照模型是整體光照模型,它把頂點到光源的距離、頂點到光源的方向向量以及頂點到視點的方向向量等參數代入該模型,計算頂點顏色。因此,可視化仿真圖像的顏色體現著物體與視點以及光源之間的空間位置關系,具有很強的三維效果。另外,為彌補圖形方法難于生成復雜自然背景的不足,OpenGL提供了對圖像數據的使用方法,即直接對圖像數據讀、寫和拷貝,或者把圖像數據定義為紋理與圖形方法結合在一起生成視景圖像以增強效果。
3.2.2OpenGL體系結構
一個完整的窗口系統的OpenGL圖形處理系統的結構為:最底層為圖形硬件,第二層為操作系統,第三層為窗口系統,第四層為OpenGL,第五層為應用軟件。如圖3.4所示。
圖3.4 OpenGL層次結構
OpenGL是網絡透明的,在客戶機/服務器體系結構中,允許本地或遠程調用OpenGL。所以在網絡系統中,OpenGL在Windows或其它窗口系統下都可以以一個獨立的圖形窗口出現。由于OpenGL是一個與平臺無關的三維圖形接口,操作系統必須提供像素格式管理和渲染環境管理。OpenGL在Windows NT上的實現是基于Client/Server模式的,應用程序發出OpenGL命令,由動態鏈接庫OpenGL32.DLL接收和打包后,發送到服務器端的WINSRV.DLL,然后由它通過DDI層發往視頻顯示驅動程序。如果系統安裝了硬件加速器,則由硬件相關的DDI來處理。OpenGL/NT的體系結構圖如圖3.5所示。
圖3.5 OpenGL/NT結構體系
在OpenGL中,gl庫是核心庫。包含115個函數,函數名前綴為gl 。glu庫是實用庫。包含43個函數,函數名前綴為glu,封裝了gl庫。aux庫是輔助庫,包含31個函數,函數前綴為aux由glaux.dll負責解釋實行。glut是實用工具庫,具有良好的跨平臺性。函數名前綴為glut。本課題所使用了的OpenGl函數如圖3.6所示。
圖3.6 OpenGL函數使用
第四章算法實現
4.1讀取dxf
首先通過AutoCAD繪制好本課題所需要平面圖,設置好相關的屬性,如圖4.1所示。然后在AutoCAD中將平面圖延展為三維圖像,如圖4.2所示。
圖4.1 所繪的平面圖
圖4.2 所延展的三維圖
4.2場景
場景是所有物體的容器,我們要將我們想顯示什么東西,就需要將它加入場景中。場景,相機與渲染器在渲染實現方面有著巨大作用,有了這三個東西,我們才能成功將物體渲染。它們三者關系如圖4.3所示。
圖4.3 場景,相機和渲染器的關系
其代碼實現如圖4.4所示。
圖4.3 場景類的實現
其中font()代表了場景中所用的字體;obj_dxf代表了場景中所引用的dxf文件;c代表了場景中使用的相機;texture,svetlo,texturovanie,ciary,anim和normals分別代表了場景中使用的紋理;fps表示每秒傳輸幀數,這里設置為200幀/秒。
4.3相機
在VC++6.0中相機的表示是Camera,它是相機的抽象基類,其子類有兩種相機,分別是正投影相機和透視投影相機,如圖4.5顯示了正交攝像機投影和透視投影之間的差別。本模型采用的是正投影,這樣可以是我們準確的得到模型中目標位置的準確信息。
圖4.5 正投影與透視投影
4.4渲染器
渲染器決定了渲染的結果應該畫在頁面的什么元素上面,并且以怎樣的方式來繪制。模型本的渲染主要是對模型紋理的渲染,也就是紋理的映射機制。在這個模型里用的最多的就是二維紋理映射。
在二維紋理映射中,使用紋理,將物體表面的細節映射到建模好的物體表面,這樣不僅能使渲染的模型表面細節更豐富,而且比較方便高效。紋理映射就是這樣一種方法,在程序中通過為物體指定紋理坐標,通過紋理坐標獲取紋理對象中的紋理,最終顯示在屏幕區域上,已達到更加逼真的效果。實現代碼片如圖4.6。
為了使我們的模型可以更加的廣泛使用,我們采取了,一種很方便的讀取紋理圖片的機制,即我們把在cad中的模型,圖層以材質命名,然后在程序保重設立一個data的數據包,包含所有的材質–紋理圖片,這樣我們就增加了,該模型的兼容性,代碼實現如圖4.7.
圖4.6 二維紋理映射機制
圖4.7 紋理的文件流
第五章 結論與展望
5.1 結論
經過本次研究得出以下結論:通過體素—三維建模方法,在AutoCad中將二維平面圖轉換為三維立體圖,利用八叉樹數據結構,完成了模型外部與內部的體素化,解決了用來有效地解決傳統建模的耗時長,以及無法達到室內外一體的局限性,完成了我們想要的實時室內外一體化建模,在室內導航的應用上有較好的效果。同時,通過對OpenGL的引用,驗證出體素-三維建模在大型建模中的優越性,同時為以后的各個領域的建模提供一些技術參考。它可以應用在很多方面,它可以與VR結合,構造更加真實的游戲場景,或者實現“虛擬場景”的網上購物等等。還可以應用在醫學,地質學,以及各種需要實時構建模型的專業性研究。
5.2 展望
鑒于時間問題,在以下幾個方面還需要做進一步的工作。第一,雖然完成了實時室內外一體化建模,但目前我們只能做到模型中的三維漫游,缺少相應的地圖屬性信息,不能通過讀取當前位置和輸入目的地來顯示出導航的路徑,以便更加直接與精確地完成導航。第二,在壓縮體素方面,由于設備和軟件熟悉程度的限制,我們沒有選擇建模效果最好的方法,而選擇了折中的方法,目前能滿足室內導航的基本需要,但如果未來需求精度要求有所提升,則需要改變壓縮體素的方法。
致謝
我們歷時將近8個月時間終于該課題的研究完成了,在這段充滿奮斗的歷程中,我們收獲了許多。在研究過程中遇到了無數的困難和障礙,都在同學和老師的幫助下度過了,他們給我提供了很多方面的支持與幫助,尤其要強烈感謝我的指導老師—奚大平老師,沒有她對我們進行了不厭其煩的指導和幫助,無私的為我們進行研究的修改和改進,就沒有我們這課題的最終完成。在此,我們向指導和幫助過我的老師表示最衷心的感謝!
同時,我們也要感謝本論文所引用的各位學者的專著,如果沒有這些學者的研究成果的啟發和幫助,我們將無法完成本課題的最終完成。至此,我們也要感謝我們的朋友和同學,他們在我們研究的過程中給予我了很多有用的素材,也在論文撰寫過程中提供熱情的幫助!金無足赤,人無完人。由于我的學術水平有限,所寫論文難免有不足之處,懇請各位老師和同學批評和指正!
參考文獻
[1]吳曉軍,劉偉軍,王天然.基于八叉樹的三維網格模型體素化方法[J].工程圖學學報,2005(04):1-7.
[2]林金花. 基于空間體素融合的三維重建算法研究[D].中國科學院長春光學精密機械與物理研究所,2017.
[3]解祥榮,徐海黎.三維模型的讀取與體素化[J].南通大學學報(自然科學版),2011,10(01):29-34.
[4][1]朱響斌,唐敏,董金祥.一種基于八叉樹的三維實體內部可視化技術[J].中國圖象圖形學報,2002(03):23-27.
[5]蔣秉川,游雄,夏青.一種基于體素的三維地形可視化方法研究[J].測繪通報,2013(03):46-49.
[6]柯芬,熊漢江,戴雪峰.一種基于體素的室內三維連通圖自動生成算法[J].測繪與空間地理信息,2015,38(03):34-37.
[7]溫佩芝,吳曉軍,史澤林,于海斌.一種三維實體模型的離散表示方法[J].計算機工程與應用,2003(15):14-15+139.
[8]戴榮. 醫學圖像三維重建算法研究及實現[D].昆明理工大學,2009.
[9]鄭順義,王曉南,馬電.一種便攜式小型物體三維重建方法[J].武漢大學學報(信息科學版)
[10]任國印,呂曉琪,楊楠,喻大華.心臟體素化三維模型感興趣血管交互式顯示方法研究[J].內蒙古科技大學信息工程學院,包頭醫學院
總結
以上是生活随笔為你收集整理的室内外实时一体化建模的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: multisim怎么新建窗口?multi
- 下一篇: python四则运算程序_四则运算小程序