750 likes | 907 Views
第四章 虛擬實境的設備. 致遠管理學院資訊管理學系 授課老師:謝慧民 九十二學年度第一學期. 立體影像 ---- 立體影像程式庫 (3D ENGINE). 目前在虛擬實境處理上的最大的問題在於三度空間影像的速度上,僅僅靠中央處理器的運算在畫面呈現的速度上還是不夠快。所以大家對此的解決看法共識是發展立體影像程式庫,並且藉由硬體加速卡的幫助下快速執行三度空間的互動畫面。. 立體影像程式庫 (3D ENGINE).
E N D
第四章 虛擬實境的設備 致遠管理學院資訊管理學系 授課老師:謝慧民 九十二學年度第一學期
立體影像----立體影像程式庫(3D ENGINE) • 目前在虛擬實境處理上的最大的問題在於三度空間影像的速度上,僅僅靠中央處理器的運算在畫面呈現的速度上還是不夠快。所以大家對此的解決看法共識是發展立體影像程式庫,並且藉由硬體加速卡的幫助下快速執行三度空間的互動畫面。
立體影像程式庫(3D ENGINE) • 下表是目前立體影像程式庫的一些歸納整理。目前最可能脫穎而出的是 SGI的 Open_GL及MicroSoft的 Direct_3D。Direct 3D是發展在Window95之下的一個圖形程式介面,在目前還在測試階段。根據MicroSo資的官方說法預計要在 1996年八月會完成第一個正式版本,不過依據以往的經驗 WIndow95一拖再拖,差點變成Window96。所以在這個部份僅僅介紹SGI的Open_GL,不過基本上立體影像程式庫的原理的大同小異。讀者自己應該可以觸類旁通吧?!
OPEN_GL-----程式介面簡介 • Open_GL是以C語言所發展的三維立體空間圖形程式介面。這個程式圖形介面是由圖形處理的龍頭公司SGI所主導發展而來的,它具有跨平台及利用硬體卡加速的種種好處。基本上這個圖形介面是由一百多個精簡明確而且功能沒有重音的圖形處理程式所組成,所以利用Open_gl這些程式庫可以具體而微的為特殊目的來發展出應用程式,比如說網路瀏覽器(Web Brower),跨平台的三度空間多媒體程式(3D Brower),或是電腦動畫程式(Computer Animation)。
OPEN_GL程式介面簡介 • Open_GL程式圖形介面就像樂高積木一樣,人們透過一百二十多個不同的積木組合可以拼湊出一個精巧有如汽車(城堡或是小人國)立體圖形介面環境。因為它只是一個圖形介面,並不是寫死在硬體或是在作業系統上,所以可以輕鬆的移植應用在不同的作業系統上。 • 目前支援的作業系統有Window95,Window NT 3.51以後版本,新一版的OS2 Merilin,unix,Linux X-window,和SGI的各種機上。在目前可以算是勢力最大的圖形程式介面。
OPEN_GL程式介面簡介 • 如今有很多圖形介面加速卡已經支援Open_GL,所以透過加速卡的硬體幫助使得 Open_GL前景看好。利用 Open_GL發展程式是在現在研究所教學及研究論文一大熱門題目。 • 在目前Open_GL在應用發展上。主要可分為這三個部份: 一、製造三維互動影像:這也是虛擬實境常常應用的部份。 二、動畫的描繪。 三、圖形使用者介面。
OPEN_GL程式介面簡介 • 由於 Open_GL是使用程式介面來處理動態影像,所以它沒有一般寫入硬體中或直接使用作業系統的發展的圖形介面來的快,現在來看這算是蠻大的傷害。因為是為了跨平台著想,所以一些基本的像畫圖(Bit mapping),畫點,是不會出現在程式介面中,在實際應用要考慮這一點。
OPEN_GL程式介面簡介 • 此外 Open_GL在程式名稱命名上是以 GL作為名字的開始,隨著用處在延伸作為註解,比如像描述二維平面空間頂點的glVertex2f (gl + vertex [頂點]+2(平面二維)+f(float,浮點數),等等。 • 如果有基本的電腦圖學概念,再學習Open_GL時會有如魚得水的感覺。貼切的程式名稱,直覺的程式設計觀念在設計使用上是非常的親和有趣的。如果能夠利用軟體輔助工具的原理,利用物件導向發展類似微軟的MFC或是寶藍OWL,IBM Visual Age。相信會有很多的人拜倒在 Open_GL下。
OPEN_GL程式介面瀏覽 • Open_GL是為了處理立體影像介面所發展出來的。它隨著影像的方法及程序來分類所有的程式介面,就如下列所列出的。如果想要深入瞭解透徹。本人極力推薦一本書 computer graphics :algorithm practice,在對照比較下相信會有更深的體會認知。
OPEN_GL程式分類 一、幾何性質(點。線和多邊形角塊)。 二、掃瞄特性(點陣圖及像素方塊)。 三、紅、綠、藍及透明度和色盤。 四、利用資料結構堆疊顯示和立即輸入展示。 五、視線範圖的決定和立體模型的轉動平移。 六、消去不可視的平面。 七、透明混合。 八、消除鋸齒。
OPEN_GL程式分類 九、貼上材質。 十、大氣效應(霧、煙和雲)。 十一、數學曲線(如非齊性B-splines)。 十二、像素座標的運算(儲存、轉換、映射和放大縮小)。 十三、圖形緩衝區的處理。 十四、樣本平面。 十五、互動的回饋,選擇資料和抓取資料。
OPEN_GL程式介面的延伸 • 由於Open_GL程式介面設計的很簡潔,因此造成在處理複雜圖形上造成很不方便的。就像透過手套拿東西一樣,遠不如自己親手來的方便。舉個例子來說,當你畫出房屋的立體圖形時,還必須自己去把點找出來,由點來畫成線,用線來連成面,再讓面來組合成立體圖形。這樣繁瑣的工作簡直是在浪費軟體工程師的寶貴時間及生命。
OPEN_GL程式介面的延伸 • 有鑑於此,一些廠商延伸發展了一些程式介面。這些程式介面基本上是利用先前發展寫好的程式庫為主延伸出來的,有了這些延伸程式庫寫起來就方便多了。以下是做一些簡單的說明: 一、GLU:這是為了視線畫面、投影表示、多邊形轉動和描繪表現所發展出來的延伸應用程式庫,它的程式名稱都以GLU做為標題,比如像 glu-perspextive---等等。
OPEN_GL程式介面的延伸 二、GLX:這是專為在 X-Window上所發展出來的程式庫。它的程式名稱都以glx為標題,比如像glxCreatsPixmap()----等等。 三、AUX:這是 Open_GL在書上所介紹發展的程式庫。同樣的它的程式名稱都以 aux為抬頭,這個可以透過網路到sgigate.sgi.com去抓取。 四 、 Open Inventor:這是以Open_GL為基礎發展的物件導向程式庫,能夠用來做為三維立體圖形介面程式的利用。值的注意的是Open_GL是以C發展的。而 OpenInventor則是以 C++做為發展工具。VRML也是以它作為基底元素發展而來的。
OPEN_GL---結語 • 隨著圖形加速卡在市場上佔有一席之地後,Open_GL的地位會顯的超然瓦屹立不搖,有如PC中的Intelx86CPU。 • 在附錄上,有一些相關資訊,網路上有很多資料可以去挖掘,而許多電腦玩家喜愛的LINUX作業系統上,也有一些專家和有心人士發展了Mesa。Mesa和LINUX蠻像的。因為涉及智慧財產權的付錢受念。因為是免費的,所以作者稱做是很像的程式介面。在網路資料庫,可以發覺它的行蹤。
OPEN_GL---結語 • 目前微軟的VC4.0版已經附有Open_GL程式庫了,當然寶藍(Borland)也不例外。而且都有良好的程式範例去觀摩,『觀摩別人的程式,是學習寫好程式的一大捷徑』。相信經由這樣學習發展過程時,會有很大的滿足感以及興趣的。
share ware • 在電腦網路上或是一些國外書中都有一些程式設計高手,在平常利用閒暇時間發展出一些程式。而這些原始檔都無私的公開給社會大眾,數量由於太多了,這方面簡潔的分成幾個部份來討論: 一、VR EXCURSION:這是作者利用C發展的程式庫,在這本書中有詳細的程式說明及用法。這套程式庫是在PC上,以dos為作業系統所設計出來,使用上蠻方便,只要細心可以很輕易的移植在window,或任何作業環境中。
share ware 二、 Fast algorithm for 3D programming:這也是書中作者以C發展的程式庫,就如書名所號稱的『快速的演算法』。這是因為作者以記憶體空間來換取運算時間的程式設計定位作法。它需要的記憶體至少要8 mega,直接就適合多種作業系統,像Dos,UNIX等等。 三、網路散佈的程式碼:3DGPL,這是一位高材生所發展的,專為三維立體遊戲所需要設計的。適合的環境有window,X-window,dos等等。同樣的也是以C撰寫的。
share ware • Render386,這是加拿大waterloo大學的工程師所發展的。這是一套以PC為主要環境所發展的,有豐富的原始檔案。有些副程式是以組合語言發展。在目錄上有完整的收錄,提供有心人研究,專科學校也可以把他當作專業研究指導學生來學習瞭解虛擬實境。除了Render386以外,也發展了一套AVRIL及VR386的程式庫。
share ware • 此外,MR toolkit也是一套不亞於的Render386虛擬實境軟體。這是由ALBERTU所發展出來的,同樣的除了程式庫外,也提供完整的程式碼研究。這套系統是以工作站為主,所以一般大眾沒有很大機會使用到。 • 在這裏,至誠的感謝這些人,他們默默的私下研究,無私的公開發表。這在現實功利主義濃厚的社會中是很少見的,套句廣告詞:『像這樣的人已經不多了!』。
PC立體模型製作程式 • 傳統上製造模型的立體圖檔都是以 CAD或是動畫製作軟體為主。CAD的軟體很多像是Autocad,Microstation,Turbo cad.‥等等都是,動畫製作軟體則有 3DS MAX,Alias,True-space,Soft-image.‥等等。
PC立體模型製作程式 • 這些軟體的使用原理都相同,都是以點來構成線,線來組成面,面來合成立體形狀。有時候也利用面的移動,轉動來形成立體模型或是加上一些類似物體形狀加減的布林運算(boolean)。這些程式設計的目的都是以發展立體圖形檔案為主描繪出動畫或是物體設計外型。此外,如果要求良好精確度的情況下最好是以CAD的程式為主設計,如果為了快速產生格點最好是則以動畫製作軟體為佳。
PC立體模型製作程式 • 對發展虛擬實境來說,這些只不過製造立體圖檔上的工具而已。有些立體模型像人形,面具-等等圖形的設計過程不是很容易而且極耗費時間。所以有很多公司都以立體掃描器(3D Scanner),或是記點機(Digitize)來製作立體圖檔。
PC立體模型製作工具 • 3D記點器的功能在掃瞄出三度空間中的位置,所以可以說是一種記錄三度空間位置的儀器,同樣的位置追跡裝置也是記錄位置的儀器。所以有位置追跡裝置的人不要犯了大科學家牛頓爵士大狗進大洞,小狗進小洞的謬誤,難道小狗不能走大洞嗎?當然位置偵測器也可以當作3D物體的描繪工具。
PC立體圖形描述格式 • 從三維立體圖形檔案是看不太出來影像情況,三維立體圖形格式跟平常的圖形資料是不一樣的。平常圖形資料,通常都包含三大部份:「檔頭,色盤顏色和像點資料」。從檔頭瞭解可以瞭解圖形的基本資料:解析度多少,顏色數目多少,及壓縮方法。而三維立體圖形檔案則包含了物體空間座標,視覺角度等等的描述資料。
PC立體圖形描述格式 • PLG是設計用來搭配Render386的程式應用發展,隨著Render386推廣的AVRIL,VR386及Jon Blosson Gossam所發展的North cad 3D都能夠處理PLG的格式,所以隱隱約約有成為另一種標準格式。 • 在附錄上及CD上,我獲得作者的同意收錄了Render386的完整原始碼及使用的程式庫。為了方便應用Render386及AVRIL起見,介紹了PLG的圖形格式,PLG是Polygon角塊的縮寫,顧名思義是描述角塊形體的檔案。
PLG格式 1、檔頭資料:包含物件名稱,頂點及面的數目多少。比如說 room200.10,這表示,這是一個房間的物體,它包含200個頂點,總共有 10個面。 2、頂點資料 :頂點是一個含 xyz座標的值 ,如 100.100.100,這就表示一個位於x=l00,y=l00,z=l00位置上的點。 3、面的描述:面是由點組成的,比如:0x00004.8.7.6.5, 這表示這一個面由四個點所組合而成的,8.7.6.5是頂點的位置。8代表頂點表上第八個點的位置,同樣的7代表第七個點的位置。
PLG格式 • 0x0000是面的描述狀況,這是由16bit(2byte)的數字組合的,分別討論如下: • 如H bit是被設為零時,SSS有下列的情形來考慮,000=>代表這個面是固體陰影法,這面是畫上固定的顏色,並沒有產生層次感,如果CCCC為零表示是256色,如果是CCCC不為零,BBBBB產生的256色又可以從CCCC產生出16種飽和度顏色。
PLG格式 • 001表示flatshated方法:這是利用陰影的產生方法,會隨著物體改變角度而產生亮度上的改變,CCCC則表示16種飽和色,BBBB-則表示顏色明亮的明亮度;如果CCCC為零,則顏色不會隨著改變,會是零。 • 010表示這是金屬材料的表面原理。 • 011表示這是透明的處理,能看穿物體表面而達到內部的結構。 • 100表示這是利用GourghShaded。
FIG格式 • 至於一般物體通常都不只由一個物體組合而成,有時包含數個物件,物件中的物件有含擴性及關係性;所以為此又發展了FIG格式,Fig顧名思義是Figure的縮寫。從一個基本的人體結構來說明,可以清楚的明白這一切。 • 基本上,Fig是一個整合plg檔案的應用結構。它使用括號{}來連接檔案的關係。圖上的人體大概結構,從圖上,可以很明顯的看出頭部是依附在胸部上,所以利用()來描述。
FIG格式 • 不過要連接兩個圖形檔案時,光憑這樣還是不夠。因為兩個檔案的彼此連接的位置還不清楚,所以還要說明連接的位置。這就是使用pos這個位置描述的時機 。除此之外也有些選項的部份像:scale,shift,rot,sort type及 map...等等。這些是可有可無的,它的意義可以從它的英文含意來揣摩。像scale就是使用的物體的放大係數,它包含三個參數分別是x,y,z的形變量。像shift就代表物體原點位置的轉移當然也是包含代表x,y,z三個參數,因為三度空間嘛!
FIG格式 • 使用在消除隱藏面及描繪時使用上,而map就是貼圖用的材質。值的注意的是pos及shift是不同的:pos是兩個物體結合時的相對位置,shift轉移物體的本身的座標(object coordinate system)。這點要先釐清楚以免在製造圖形產生致命的錯誤。 • 以下是一個簡單的FIG檔案,細對照之下相信不難理解這個結構吧!在光碟上還有一堆檔案,有空的話細細去體會觀摩吧!
WLD格式 • 這個檔案是用來描述虛擬環境上使用上的,當在描述虛擬環境之前先回憶前面所說的模擬。要瞭解這個檔案結構時,最好能夠先分析一下你所生活的環境架構。如果沒有光線會如何?你周邊的物體的擺設是-?你要如何描述你所在的四周周圍呢?是不是擺設的每一個物品都在視線內?屋子的門和牆壁的差別是?
WLD格式 • 在經過深思熟慮後,再對照這個檔案的基本成員,相信會很快的將可以很快上製作這個檔案,至於會不會讓使用者在愛不釋手就要靠你的匠心獨具的精巧構思。 • 通常一個虛擬環境不只包含一個物體,通常還需要一些景象資料,像點光源、反射光、光徑大小及許多物體等等,當人使用虛擬實境時第一步要確定自己的位置所在及視線範圍,而隨著移動,轉動視線範圍並產生互動,進而激發使用者的想像力而沈迷在虛擬環境中留連忘返;所以虛擬世界是這一切的開始,Wld是world的縮寫,它是以文字寫成的。