摘 要: 消隱技術(shù)是計(jì)算機(jī)三維模擬的關(guān)鍵。為實(shí)現(xiàn)對(duì)材料三維立體圖形的快速繪制,本文利用連續(xù)切片截面之間相互平行的特性,通過(guò)尋找相鄰截面中的關(guān)鍵點(diǎn),分別從兩邊向中間繪制側(cè)面并填色,從整體上采用自下而上的方法,實(shí)現(xiàn)了立體圖形的消隱。該方法避免了常規(guī)消隱方法中需要建立構(gòu)成物體幾何元素的方程并求解諸元素之間相交、前后遮擋關(guān)系等復(fù)雜的運(yùn)算過(guò)程。
關(guān)鍵詞: 連續(xù)切片 三維重構(gòu)" title="重構(gòu)">重構(gòu) 消隱 計(jì)算機(jī)模擬
在連續(xù)切片的三維重構(gòu)過(guò)程中,最后得到的圖形是實(shí)體的外表面,應(yīng)該具有良好的立體效果" title="立體效果">立體效果。但是在最終繪制圖形之前,需要經(jīng)過(guò)坐標(biāo)轉(zhuǎn)換[1,2]和圖形消隱處理[3,4]才能繪制出符合透視關(guān)系、具有真實(shí)立體感的圖形。否則,比較復(fù)雜的立體圖形將呈現(xiàn)為一幅雜亂無(wú)章的畫面。
1 消隱的定義
消隱是指在計(jì)算機(jī)繪制立體圖形時(shí),只顯示透視關(guān)系中能夠看得見(jiàn)的部分,不顯示被遮擋的線段或平面,從而使繪制的圖形符合透視關(guān)系并具有立體感的繪圖方法。
為了達(dá)到消隱的目的,需要把表示三維物體的每個(gè)幾何元素(包括點(diǎn)、線、面)與每個(gè)構(gòu)成物體的輪廓面進(jìn)行遮蔽判斷,即是否全部或部分被遮蔽。把被遮蓋線段或部分被遮蓋線段與可見(jiàn)線段或部分可見(jiàn)線段區(qū)分開(kāi)來(lái),最后畫出可見(jiàn)線段和線段的可見(jiàn)部分,隱藏不可見(jiàn)線段和線段的不可見(jiàn)部分,就得到了經(jīng)過(guò)消隱處理的立體圖形。
各種消隱算法都涉及到排序,最常用的就是某種形式的幾何排序,即將物體及物體各表面按照相對(duì)于某一觀察點(diǎn)(注:視覺(jué)成像遵循透視投影的原理,透視投影的特點(diǎn)是,所有的投影線都從空間某一點(diǎn)出發(fā),該點(diǎn)被稱為投影中心或觀察點(diǎn),也稱為視點(diǎn))的距離遠(yuǎn)近依次排序。通過(guò)這種排序,可以找出位置上靠近視點(diǎn)的物體表面,最后確定各表面之間在透視關(guān)系上的遮擋關(guān)系。一般情況下,距離觀察點(diǎn)遠(yuǎn)的物體總是被距離觀察點(diǎn)近的物體部分或完全遮擋。
排序不僅在空間深度方向(如Z方向)進(jìn)行,而且要在畫面(如X、Y方向)平面內(nèi)進(jìn)行。實(shí)現(xiàn)排序要花費(fèi)大量的時(shí)間進(jìn)行相交計(jì)算、深度檢測(cè)和關(guān)系判斷。為了提高排序效率,各算法中需要頻繁地利用點(diǎn)、邊、面的相關(guān)性信息。相關(guān)性是指物體之間或一個(gè)物體的各部分之間引起隱藏現(xiàn)象改變的相互關(guān)系。消隱時(shí),通過(guò)考慮這些關(guān)系,可以大幅度減少消隱搜索的計(jì)算量。
2 消隱算法分類及特點(diǎn)
按照所處空間位置的不同,消隱算法可以歸納為以下三類:(1)在描述物體的坐標(biāo)系空間中進(jìn)行,稱為物體空間算法或用戶空間算法。(2)在圖像空間中進(jìn)行,稱為圖像空間算法或屏幕空間算法。(3)同時(shí)在物體空間和圖像空間中實(shí)現(xiàn),如畫家算法。
畫家消隱算法與畫家創(chuàng)作油畫的過(guò)程類似,嚴(yán)格依照透視關(guān)系,先畫背景,再畫中間景物,最后畫近景。按照這種順序構(gòu)造畫面,即可解決畫面的消隱問(wèn)題。
消隱處理是計(jì)算機(jī)繪圖中一個(gè)比較復(fù)雜的問(wèn)題。目前的消隱方法過(guò)程涉及建立各個(gè)平面、線段的幾何方程,并對(duì)它們的相交性、深度順序進(jìn)行計(jì)算,從而確定圖形中各個(gè)幾何元素的可見(jiàn)部分,最后畫出立體圖形。這些消隱方法的計(jì)算量大,程序設(shè)計(jì)" title="程序設(shè)計(jì)">程序設(shè)計(jì)復(fù)雜,占用存儲(chǔ)空間多,數(shù)據(jù)結(jié)構(gòu)復(fù)雜,非專業(yè)人員難于理解、編制和維護(hù)[5~7]。
3 本文設(shè)計(jì)的消隱方法
在繪制由切片截面構(gòu)成的立體圖形時(shí),由于切片截面是相互平行的,因此,立體圖形的可見(jiàn)性問(wèn)題轉(zhuǎn)變?yōu)槲挥谏舷陆孛嬷g一系列相鄰側(cè)面位置關(guān)系的判斷問(wèn)題。在把切片截面轉(zhuǎn)變?yōu)榱Ⅲw圖形的過(guò)程中,利用切片截面之間相互平行的特性,結(jié)合畫家消隱方法,可以避免計(jì)算和判斷幾何元素的相交性、深度順序等復(fù)雜過(guò)程,從而得到一種高效、簡(jiǎn)潔的消隱方法。該消隱方法主要由確定關(guān)鍵點(diǎn)位置以及確定側(cè)面的繪圖順序兩部分組成。
3.1 確定關(guān)鍵點(diǎn)位置
由一系列相互平行的截面構(gòu)成的實(shí)體,其側(cè)面的可見(jiàn)性與具有最小和最大" title="最大">最大x坐標(biāo)值的點(diǎn)密切相關(guān),凡是位于這兩點(diǎn)之間并且距觀察點(diǎn)較近一側(cè)的側(cè)面均是可見(jiàn)的面。
依據(jù)上述原則,先找出上截面中具有最小和最大x坐標(biāo)值點(diǎn)的序號(hào),再找出具有最大y坐標(biāo)值的點(diǎn)的序號(hào),然后分別從兩邊向具有最大y坐標(biāo)值的點(diǎn)畫出每個(gè)側(cè)面并填充顏色[8],這樣就使得不可見(jiàn)的面被隱藏,而可見(jiàn)的面被顯示出來(lái),實(shí)體的立體效果得以體現(xiàn)。
為了畫出實(shí)體所有的可見(jiàn)部分,僅找出上截面的最小和最大x坐標(biāo)值的序號(hào)是不夠的。只有當(dāng)上、下截面具有最大和最小x坐標(biāo)值的點(diǎn)分別相互匹配時(shí),才能保證依據(jù)上截面中具有最大和最小x坐標(biāo)值的點(diǎn)的序號(hào)畫出的側(cè)面是實(shí)際可見(jiàn)的。因此要根據(jù)上下截面點(diǎn)的匹配情況,對(duì)上截面中兩個(gè)特殊點(diǎn)的序號(hào)進(jìn)行相應(yīng)調(diào)整。
為便于區(qū)分,將上截面中具有最大和最小坐標(biāo)值點(diǎn)的序號(hào)分別表示為MAX1和MIN1,與其相匹配并且位于下截面中點(diǎn)的序號(hào)表示為max2和min2;將下截面中具有最大和最小坐標(biāo)值的點(diǎn)的序號(hào)表示為MAX2和MIN2,與其相匹配并且位于上截面的點(diǎn)的序號(hào)表示為max1和min1;具有最大y坐標(biāo)值并且位于上截面中的點(diǎn)的序號(hào)表示為MAXY。
在分別找到上、下截面中具有最大和最小x坐標(biāo)值點(diǎn)的序號(hào)后,如果min1點(diǎn)的y坐標(biāo)值小于MIN1的點(diǎn)的y坐標(biāo)值,則應(yīng)把min1的值賦給MIN1;同樣,如果max1點(diǎn)的y坐標(biāo)值大于MAX1點(diǎn)的y坐標(biāo)值,則把max1的值賦給MAX1。在對(duì)MAX1、MIN1的值作了以上調(diào)整后,就可以開(kāi)始分別從兩邊向MAX1點(diǎn)繪制側(cè)面并填色。各點(diǎn)及其匹配點(diǎn)的位置示意圖如圖1所示,圖中MAX1、MIN1的序號(hào)數(shù)值將分別被賦予max1、min1的值。
3.2 確定側(cè)面的繪圖次序
在確定了繪圖所需的關(guān)鍵點(diǎn)之后,需要確定各側(cè)面的繪制順序,這對(duì)于正確繪制具有立體感的圖形非常重要。只有按照側(cè)面與觀察者之間的距離,由遠(yuǎn)而近地繪制側(cè)面才能使圖形的立體感顯現(xiàn)出來(lái)。由于編號(hào)的原因,在確定了所需的關(guān)鍵點(diǎn)之后,還需確定繪制側(cè)面的順序。
為了解釋繪圖順序,這里引入一個(gè)“圖形的開(kāi)口”概念:即圖形的第一個(gè)點(diǎn)與最后一個(gè)點(diǎn)之間的邊。不同開(kāi)口位置的繪圖次序示意圖如圖2所示。如果圖形的開(kāi)口背離觀察者(如圖2(a)),則MIN1點(diǎn)和MAX1點(diǎn)之間的序號(hào)是連續(xù)的,其繪圖的順序相對(duì)簡(jiǎn)單,繪圖程序?qū)⒎謩e從MIN1向MAXY、MAX1向MAXY繪圖。如果圖形的開(kāi)口正好位于觀察者一邊(如圖2(b)),則MIN1點(diǎn)和MAX1點(diǎn)之間的序號(hào)不連續(xù),繪圖順序較前一種情況稍微復(fù)雜,繪圖程序?qū)⑾葟腗IN1點(diǎn)向序號(hào)為第一的點(diǎn)繪圖,再?gòu)腗AX1向最后一個(gè)序號(hào)的點(diǎn)繪圖,最后繪制出第一序號(hào)與最后序號(hào)點(diǎn)之間的側(cè)面,并將每一個(gè)繪制好的側(cè)面填色。通過(guò)這種繪圖次序,從觀察點(diǎn)出發(fā)看不見(jiàn)的面均被可見(jiàn)平面覆蓋,從而實(shí)現(xiàn)了圖形的消隱。此流程圖只說(shuō)明了繪制側(cè)面的算法,就整體繪圖算法來(lái)說(shuō),采用的方法是從下往上繪制,邊繪圖,邊填色,這樣就解決了整體消隱的問(wèn)題。
尋找關(guān)鍵點(diǎn)是此消隱方法的關(guān)鍵所在。確定了關(guān)鍵點(diǎn)之后就可以確定圖形可見(jiàn)部分與被遮蓋部分的分界線。其次是確定繪圖順序,正確的繪圖順序保證了圖形可見(jiàn)部分的正確顯示。此消隱方法利用了相鄰截面互相平行的特性,簡(jiǎn)化了消隱計(jì)算量,提高了消隱效率。消隱問(wèn)題是繪制連續(xù)切片立體圖形的最后環(huán)節(jié),消隱效果直接關(guān)系到圖形的視覺(jué)效果。
消隱算法流程如圖3所示。順序處理連續(xù)截面的信息,逐層繪制出消隱后的圖形并填充顏色,即可得到符合透視效果并具有真實(shí)立體感的三維實(shí)體圖形。
與其他消隱方法(如徑向分類法、平面方程法等)相比[9],本文提出的消隱方法通過(guò)確定相鄰切片平面之間的關(guān)鍵點(diǎn),畫出物體的可見(jiàn)部分,并遮蓋透視關(guān)系中不可見(jiàn)的圖形部分,實(shí)現(xiàn)對(duì)圖形不可見(jiàn)部分的消隱。該算法避免了用于建立組成物體各幾何元素的方程,以及對(duì)這些元素之間展開(kāi)相交、前后遮擋關(guān)系等大量的運(yùn)算工作,較好地解決了立體圖形的消隱問(wèn)題。
參考文獻(xiàn)
1 劉國(guó)權(quán).體視" title="體視">體視學(xué)在材料科學(xué)研究中的進(jìn)展與展望[J].中國(guó)體視學(xué)與圖像分析,1996;1(2):96~101
2 夏小玲.三維消隱算法研究[J].東北大學(xué)學(xué)報(bào),2002;4(2):138~141
3 陳百明,李華清,李旭東.計(jì)算機(jī)模擬材料組織結(jié)構(gòu)的程序設(shè)計(jì)[J].蘭州理工大學(xué)學(xué)報(bào),2005;31(1):17~20
4 Herbert M J,Jones C B,Tudhope D S et al.There-dimen-sional reconstruction of geoscientific objects from serial sec-tions[J].Visual Computer,1995;11(7):343~359
5 辜曉川,張晉.一種簡(jiǎn)便消隱方法的實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,1996;15(11):11~12
6 Hamlin G,Gear G.Raster-scan Hidden Surface Algorithm Techniques[J].Computer Graphics,1977;11(2):206~213
7 Griffiths J G.Bibliography of Hidden-line and Hidden-sur-face Algorithms[J].Compute Aided Des,1978;10(3):203~206
8 芮小平,付長(zhǎng)晶,余志偉.多邊形填充消隱算法[J].工程設(shè)計(jì)CAD與智能建筑,2000;(6):61~62
9 Berg M D.Generalized hidden surface removal[J].Computa-tional Geometry,1996;5(5):249~276