本站小編為你精心準備了虛擬城市開發參考范文,愿這些范文能點燃您思維的火花,激發您的寫作靈感。歡迎深入閱讀并收藏。
長期以來,城市規劃人員的一個重要的工作就是進行各種設計或規劃圖的繪制,但是這些圖紙并不能給人們提供一個直觀的、富有真實感的場景。后來,人們雖然也使用紙板或木料來制作三維模型,以實現城市景觀的三維可視化。但其制作的工作量巨大、費用昂貴、須具備較高的制作技巧,而且僅能從外圍觀看,無法進入,修改也很困難。鑒于以上原因,在計算機上建立三維虛擬城市成為必然。虛擬城市的建立能夠全方位地、直觀地給人們提供有關城市的各種具有真實感的場景信息,并可以以第一人稱的身份進入城市,感受到與實地觀察相似的真實感。虛擬城市的各種模型易于修改,而且可以實現城市信息的查詢與分析功能。這些都是傳統的方法所無法比擬的。本文用制作實例的方式探討了虛擬城市的開發技術。
1.虛擬城市開發的基本原理
要建立虛擬城市,首先要建立三維城市模型。三維城市空間中的典型實體對象一般具有以下幾種:城市中的各種建筑物、街道、綠地、公共場所、城市地形、樹木等。除此以外,還有一些輔助性的設施,如消防栓、變電站、噴泉、公園的長椅等。這些模型的制作可以采用編程的方法或者現有的三維模型制作軟件來完成。所謂編程的方法是在程序中利用三維空間中的坐標點和圖形繪制函數來實現模型的建立,由于城市模型的造型十分復雜,因而很難確定模型的具體幾何數據,此方法多用來制作地形模型,對于其他模型的制作則很少采用。制作城市模型的最好的方法是使用現有的成熟的三維設計軟件,如:3dsmax、truespace等。
虛擬城市除了能實現城市信息的三維可視化外,其另一個重要的功能就是能實現城市專題信息的查詢功能,甚至實現一定的分析功能??梢詫⑻摂M城市定義為以下公式:
虛擬城市=三維城市模型+專題信息+查詢功能+分析功能
要實現一個虛擬城市系統可考慮以下兩種方案:
一種方案是利用高級語言和三維圖形開發庫的方法,常用的開發語言是c++,常用的圖形開發庫是opengl3d或者directx3d。此方法的特點是開發的靈活性強、能實現功能復雜的應用系統。其缺點是開發者須熟練掌握編程技術,并且具備較高的計算機圖形學知識。另外,還要學習opengl3d或者directx3d的復雜開發技術。此方案的實現難度大,一般用戶根本無法勝任。其實現的應用系統也很難滿足網上使用的要求。
第二種方案是使用專用的三維虛擬開發工具,目前廣泛使用的是vrml語言。vrml(虛擬現實造型語言)是一種描述交互式三維世界和對象的文件格式。vrml允許描述對象并把對象組合到虛擬場景中,可以實現仿真系統,可模擬動畫、具有動力學特性的物體。vrml能構造一個全交互的世界,其中的對象能對外部事件做出響應,并可在其中任意穿行。另外,其重要特性是支持虛擬場景的網上,并可實現多用戶的實時參與。vrml比高級語言容易掌握,并且無須再去了解opengl3d或者directx3d之類的三維圖形開發庫,這對于普通用戶來說無疑是一個福音。若配以java程序的支持,也可實現功能較強大的系統。
綜合以上兩種方法,對于功能不太復雜的應用,采用后一種方法較為合適。下面我們將就后一種方案詳細介紹虛擬城市開發的技術細節。
2.虛擬城市的開發技術
2.1.三維城市模型的建立
虛擬場景的建立和建筑cad中的場景的建立有著很大的區別,它首先強調的是模型的簡單化,這是由虛擬現實的實時性要求決定的。在響應速度和場景的真實性發生沖突時,應犧牲一定的真實性,只要能在視覺上達到基本真實即可。因此,常用一些簡單的框架來代替復雜模型,但為了保證一定的真實性,可采用貼圖的方式來彌補視覺上的不足。貼圖有以下兩種制作方法:一種是使用繪畫軟件進行手工繪制、另一種是對建筑物的各個觀察面進行拍照,然后用掃描儀掃描成相關貼圖材質。第一種方法的顏色可限定在256色內,其壓縮的比例較大,貼圖文件較小,生成的場景文件也較小,適合網上傳遞和實時性的要求。后一種方法視覺效果好,但文件的壓縮比例較小,貼圖文件較大,生成的場景大,在網上傳遞和實時性方面不如前一種方法好。無論用哪一種方法都需考慮貼圖的分辨率和尺寸,為了便于下載和渲染,在質量和大小允許的情況下,一幅貼圖限為320*240(或240*320)像素、分辨率為72dpi,用jpeg壓縮(采用最高壓縮比)后約為20k字節。
根據以上所述的貼圖制作方法,虛擬場景中的對象模型可分為以下幾類:
(a)由簡單幾何體組成的簡單模型:該類模型常用作遠處建筑物的替身,在lod方法中采用;
(b)賦予手繪貼圖的模型;
(c)賦予照片材質的模型;
(d)賦予手繪和照片混合材質的模型;
(e)具有全部細節的精致模型;
2.1.虛擬城市交互查詢功能的建立
為虛擬城市模型加入交互和查詢功能可采用兩種方法:通過編程加入相應的交互和查詢功能、利用vrml的輔助工具來完成交互和查詢功能的加入。后一種方法比較適合普通的用戶。
kinetix制作了特殊的vrml輸出嵌入程序,可以輸出場景,包括幾何、材質、動畫制作等,嵌入程序也可制作特殊的vrml輔助工具來規定場景的交互元素。運行vrml嵌入程序vrmlout.exe即可安裝vrml嵌入程序。
通過vrml嵌入程序,可設置以下輔助工具:
anchor:可將某一實體作為熱點,當被點擊時,取出網上所指定的文件。若為vrml場景文件,則該場景被下載顯示。若為其他類型文件,由瀏覽器決定如何處理;
touchsensor:對從指定設備的輸入產生相應的事件,這些事件表示用戶是否指向特定幾何體,同時也表示用戶何時何處按下定位設備的按鈕;
proxsensor:接近感知器,指定當用戶進入、離開或在立方體的區域內移動時產生的事件;
timesensor:在時間變化是發出事件,可用來控制動畫,也可用于某一時刻進行某項活動,或于某一時間間隔中產生事件;
navinfo:描述有關觀察者和觀察模式的物理特性;
background:設定場景的背景;
fog:設置霧化的效果;
sound:設定聲音片段的有效范圍,以產生隨距離改變的音響效果;
billboard:是某一對象隨用戶一起旋轉,以使之始終面向用戶;
lod:允許瀏覽器在物體表示的不同層次細節間自動切換;
inline:可在文件中引入外部文件的場景,避免重復制作。
通過以上輔助工具,就可制作出虛擬城市場景及其交互和查詢功能。
2.3.若干開發技巧介紹
2.3.1減少文件大小的方法
(1)使用實例:對于在場景中多次使用的對象,可在該對象首次使用時用def給物體命名,以后僅需通過名字即可引用該物體。
(2)使用原型:原型物體是指那些使用頻繁且改動不大的物體。使用它可減少文件的大小。由于使用了def/use方法,物體一旦定義,只要指定發生變化的公共接口即可。另外,原型顯示出場景層次中哪一部分可修改,瀏覽器可自由地優化那些不修改的部分。
(3)壓縮文件:在文件前,使用gzip工具壓縮vrml文件和相關的html文件,大約可是文件減小10~100倍。
2.3.2提高渲染速度的技巧
(1)簡化場景:簡化場景有以下方法:
·減少多邊形的數目,這可極大地提高執行的性能;
·使用紋理代替多邊形造型,既可美化場景又可提高性能;
·使用灰度圖的紋理;
·盡量少用光源,這將有效地提高渲染的速度;
·使用布告板節點,此節點允許在場景中使用二維圖象來模擬三維造型并旋轉,從而始終面對觀察者。此法既減小了文件又不影響真實效果,可用來制作樹木、電線桿、路牌、消防栓等輔助性對象;
(2)場景分割:將大的場景分為多個相對獨立的小場景,通過anchor節點為場景中邏輯上分離的部分建立連接關系;
(3)自適應lod節點:若在lod的range域中未明確指定具體值,瀏覽器會在給定時刻決定哪一層物體需要顯示。該節點允許根據硬件平臺的能力調整場景的細節程度。在建立一條街道時,由于街道兩邊有許多精細的建筑物,要對它們進行實時渲染是不可能的,但又不能不可見,僅需讓用戶能以一定的速度前進即可。在此,可為每個建筑物建立兩個lod節點,一個是沒有明確范圍的外部lod,另一個是具有near和far范圍的內部lod節點。內部節點能按建筑物與攝像機的距離調整層次,外部"自適應lod"節點允許瀏覽器調整必要的多個建筑物以趕上場景的動態變化。
(4)碰撞檢測要花費大量的處理時間,為提高對復雜物體的碰撞檢測速度,可在collision節點的proxy(替身)域指定某一更為簡單的幾何體作為該形體的替身,它與被替代的原形體占用大致相同的空間。這樣,可大大減少檢測時間。
3.結束語
以上介紹了虛擬城市的基本原理和制作技巧,對于進行其他領域的虛擬現實應用制作同樣有效,僅為場景中實體的不同。用vrml制作虛擬現實入門容易,但要達到很高的視覺效果和運行速度并非易事,須對vrml和圖形學進行深入了解才可勝任。我們用它制作了虛擬校園,其運行效果較為滿意??梢韵嘈?,隨著vrml的不斷發展,我們將可用它制作出功能更加強大的虛擬現實應用。