第九章建模與消隱_第1頁
第九章建模與消隱_第2頁
第九章建模與消隱_第3頁
第九章建模與消隱_第4頁
第九章建模與消隱_第5頁
已閱讀5頁,還剩108頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第九章建模與消隱2本章學習目標柏拉圖多面體的數(shù)據(jù)結(jié)構(gòu)光滑物體網(wǎng)格劃分的數(shù)學模型凸多面體的背面剔除算法曲面的背面剔除算法深度緩沖算法深度排序算法39.1三維物體的數(shù)據(jù)結(jié)構(gòu)

9.2消隱算法分類

9.3隱線算法

9.4隱面算法9.5本章小結(jié)

本章內(nèi)容4在二維顯示器上繪制三維圖形時,必須把三維信息經(jīng)過投影變換為二維信息。由于投影變換失去了圖形的深度信息,往往導致對圖形的理解存在二義性。要生成具有真實感的圖形,就要在給定視點和視線方向之后,決定場景中物體哪些線段或表面是可見的,哪些線段或表面是不可見的。這一問題習慣上稱為消除隱藏線和消除隱藏面,簡稱為消隱。59.1三維物體的數(shù)據(jù)結(jié)構(gòu)場景中經(jīng)常繪制的三維物體有柏拉圖多面體PlatonicPolyhedra圓柱cylinder球sphere圓錐cone圓環(huán)torus這些物體可以采用線框模型描述,也可以采用表面模型或?qū)嶓w模型描述。無論使用哪種模型描述,都需要為物體建立頂點表、邊表和面表構(gòu)成的數(shù)據(jù)結(jié)構(gòu)。建立三維用戶坐標系為右手系Oxyz,x軸水平向右為正,y軸垂直向上為正,z軸從紙面指向觀察者。69.1.1物體的幾何信息和拓撲信息幾何信息:描述幾何元素空間位置的信息。拓撲信息:描述幾何元素之間相互連接關(guān)系的信息。描述一個物體不僅需要幾何信息的描述而且需要拓撲信息的描述。因為只有幾何信息的描述,在表示上存在不惟一性。圖9-1所示的5個頂點,其幾何信息已經(jīng)確定,如果拓撲信息不同,則可產(chǎn)生圖9-2和9-3所示的兩種不同圖形。圖9-1五個頂點圖9-2五角星連線圖9-3五邊形連線對物體線框信息的描述不僅包括頂點坐標,而且包括每條邊是由哪些頂點連接而成。對于物體表面信息的描述包括每個表面是由哪些邊連接而成,或是由哪些頂點環(huán)繞而成。79.1.2三維物體的數(shù)據(jù)結(jié)構(gòu)在三維坐標系下,描述一個物體不僅需要頂點表描述其幾何信息,而且還需要借助于邊表和面表描述其拓撲信息,才能完全確定物體的幾何形狀。制作多面體或曲面體的旋轉(zhuǎn)動畫時,常將物體的中心假設(shè)為旋轉(zhuǎn)中心。假定立方體中心位于三維坐標系原點,立方體的邊與坐標軸平行,且每條邊的長度為2a。立方體模型如圖9-4所示。立方體是凸多面體,滿足歐拉公式:V+F-E=2式中:V是多面體的頂點數(shù),F(xiàn)是多面體的面數(shù),E是多面體的邊數(shù)圖9-4立方體數(shù)學模型8表9-1立方體頂點表頂點x坐標y坐標z坐標V0x0=-ay0=-az0=-aV1x1=ay1=-az1=-aV2x2=ay2=az2=-aV3x3=-ay3=az3=-aV4x4=-ay4=-az4=aV5x5=ay5=-az5=aV6x6=ay6=az6=aV7x7=-ay7=az7=a9表9-2立方體邊表邊起點終點E0V0V1E1V1V2E2V2V3E3V3V0E4V4V5E5V5V6E6V6V7E7V7V4E8V0V4E9V1V5E10V2V6E11V3V710表9-3立方體面表面第1條邊第2條邊第3條邊第4條邊說明F0E4E5E6E7前面F1E0E3E2E1后面F2E3E8E7E11左面F3E1E10E5E9右面F4E2E11E6E10頂面F5E0E9E4E8底面119.1.3實體的描述模型線框模型(wireframemodel)是計算機圖形學中表示物體最早使用的模型,而且一直在使用。線框模型只是用幾何體的邊線來表示物體的外形,沒有表面和體積等概念。線框模型是表面模型和實體模型的基礎(chǔ),只使用頂點表和邊表兩個數(shù)據(jù)結(jié)構(gòu)就可以描述。圖9-5所示為立方體線框模型。優(yōu)點:可以產(chǎn)生任意方向視圖,視圖間保持正確的投影關(guān)系,常用于繪制三視圖或斜軸測圖等。缺點:所有棱邊全部繪制出來,容易產(chǎn)生二義性,如圖9-6所示線框模型12圖9-5立方體線框模型圖9-6線框模型二義性13表面模型(surfacemodel)是利用物體的外表面來構(gòu)造模型,就如同在線框模型上蒙上了一層外皮,使物體具有了一層外表。表面模型仍缺乏體積的概念,是一個物體的空殼。與線框模型相比,表面模型增加了一個面表,用以記錄邊面之間的拓撲關(guān)系。優(yōu)點:可以對表面進行平面著色或光滑著色、可以為物體添加光照或紋理等。缺點:無法進行實體之間的并交叉運算。圖9-7表示的是雙三次Bezier曲面的網(wǎng)格模型。圖9-8表示的是雙三次Bezier曲面的表面模型。在圖9-8中,Bezier曲面沒有圍成一個封閉的空間,只是一張很薄的面片,其表面無內(nèi)外之分,哪面是正面、哪面是反面,沒有給出明確的定義。表面模型14圖9-7雙三次Bezier線框模型圖9-8雙三次Bezier表面模型15實體模型(solidmodel)是在封閉的表面模型內(nèi)部進行了填充,有了如體積和重量等特性,能反映立體的真實性,立體才具有“體”的概念。它的內(nèi)部和外部的概念,定義了在表面模型的哪一側(cè)存在實體。它的表面有正面和反面之分。如圖9-9所示。用有向棱邊隱含地表示表面的外法向量方向。常用右手準則定義,拓撲合法的物體在相鄰兩個面的公共邊界上,棱邊的方向正好相反,如圖9-10所示。與表面模型數(shù)據(jù)結(jié)構(gòu)的差異。將面表的頂點索引號按照從物體外部觀察的逆時針方向的順序排列,可確切地分清體內(nèi)體外。與線框模型、表面模型的區(qū)別。記錄了頂點的信息,以及線、面、體的拓撲信息。實體模型常采用集合論中的并、交、差等運算來構(gòu)造復(fù)雜實體。

3.實體模型16(a)正面(b)反面圖9-9立方體表面的正面和反面圖9-10立方體實體模型一般情況下,使用頂點表、邊表和面表3張表可以方便地檢索到物體的任意一個頂點、任意一條邊和任意一個表面,而且數(shù)據(jù)結(jié)構(gòu)清晰。實際建模中,實體模型采用了有向棱邊,相鄰兩個表面上共享的一條棱邊的定義方向截然相反,導致無法確定棱邊的頂點連接順序,因而放棄邊表,僅使用頂點表和面表來表示物體的幾何模型。且面表中按照表面法矢量向外的方向遍歷多邊形頂點索引號,表明處理的是物體的正面。僅用頂點表和面表的缺點是物體的每條邊被重復(fù)繪制2次。179.1.4雙表結(jié)構(gòu)不管是三維凸多面體還是光滑物體,只要給出頂點表和面表數(shù)據(jù)文件,就可以正確地確定數(shù)據(jù)結(jié)構(gòu)。在雙表結(jié)構(gòu)中,立方體的頂點表依然使用表9-1。面表需要重新按頂點索引號設(shè)計。圖9-11為圖9-4所示立方體的展開圖。V2V1V0V3V6V5V1V0V4V7V3V2V3V0F0F1F2F3F4F5圖9-11立方體的展開圖

18表9-4根據(jù)立方體的展開圖重新設(shè)計了面表結(jié)構(gòu)。

表9-4立方體面表面第一個頂點第二個頂點第三個頂點第四個頂點說明F04567前面F10321后面F20473左面F31265右面F42376頂面F50154底面191.定義三維頂點類

如圖9-12所示,包括頂點的三維坐標(x,y,z)圖9-12三維頂點類

202.定義表面類

如圖9-13,表面類包括表面的頂點數(shù)和表面的頂點索引號。SetNum()用于動態(tài)設(shè)置表面的頂點數(shù),常用于處理3個頂點的三角形面片或4個頂點的四邊形面片。圖9-13表面類

213.讀入立方體的點表

在程序中定義ReadVertex()函數(shù)讀入物體的頂點表如圖9-14圖9-14讀入立方體的頂點表224.讀入立方體的面表在程序中定義ReadFace()函數(shù)讀入物體的面表,如圖9-15圖9-15讀入立方體的面表239.1.5常用物體的數(shù)學模型正多面體是由若干個全等的正多邊形圍成,并且相交在各個頂點上的棱邊數(shù)都相等的凸多面體。正多面體只有正四面體、正六面體、正八面體、正十二面體和正二十面體五種,如圖9-16所示。表9-5給出了其幾何信息。這五種多面體統(tǒng)稱為柏拉圖多面體。柏拉圖多面體屬于凸多面體。柏拉圖多面體圖9-16柏拉圖多面體24圖9-17柏拉圖多面體對偶多面體

在幾何學中,若一種多面體的每個頂點均能對應(yīng)到另一種多面體上的每個面的中心,二者互稱為對偶多面體。25柏拉圖多面體對偶性點線面4648126612830201212302026多面體正四面體正六面體正八面體正十二面體正二十面體頂點數(shù)V4862012邊數(shù)E612123030面數(shù)F4681220面的形狀正三角形正方形正三角形正五邊形正三角形表9-5柏拉圖多面體幾何信息統(tǒng)計27〔1〕正四面體建立正四面體的伴隨立方體可以很容易地確定正四面體的頂點表和面表。xyzV1OV3V2V0圖9-18正四面體幾何模型正四面體的外接球和其伴隨立方體的外接球是同一個球;正四面體外接球的直徑就是立方體的對角線。假設(shè)立方體的半邊長為a,令V0點為(a,a,a),則正V1V2V3頂點表見表9-6。28表9-6正四面體頂點表頂點x坐標y坐標z坐標V0x0=ay0=az0=aV1x1=ay1=-az1=-aV2x2=-ay2=-az2=aV3x3=-ay3=az3=-a表9-7正四面體面表面第一個頂點第二個頂點第三個頂點F0123F1032F2013F302129

正四面體的外接球面的半徑為,展開圖如圖9-19所示,面表見表9-7。圖9-19正四面體展開圖30正四面體31〔2〕正八面體設(shè)正八面體的外接球面的半徑為r,6個頂點都取自坐標軸,并且兩兩關(guān)于原點對稱,如圖9-20所示,頂點表見表9-8。根據(jù)圖9-21所示的正八面體展開圖可以得到正八面體的面表,見表9-9。V0V5V2V3V4V1xyzO圖9-20正八面體幾何模型

32表9-8正八面體頂點表

頂點x坐標y坐標z坐標V0x0=0y0=rz0=0V1x1=0y1=-rz1=0V2x2=ry2=0z2=0V3x3=0y3=0z3=-rV4x4=-ry4=0z4=0V5x5=0y3=0z5=r33面第一個頂點第二個頂點第三個頂點F0045F1052F2023F3034F4154F5125F6132F7143圖9-21正八面體展開圖表9-9正八面體面表34正八面體模型35〔3〕正十二面體建立正十二面體的坐標系如圖9-22所示。三個互相垂直的矩形是黃金矩形。黃金矩形就是矩形的短邊與長邊之比為:被稱為黃金分割數(shù),簡稱黃金數(shù)。

圖9-22正十二面體坐標系36把一條線段分割為兩部分,使其中一部分與全長之比等于另一部分與這部分之比。其比值是一個無理數(shù),取其前三位數(shù)字的近似值是0.618。由于按此比例設(shè)計的造型十分美麗,0.618被稱為黃金分割數(shù)。黃金數(shù)推導:37,即黃金矩形

黃金矩形分割為兩塊,其中一塊為正方形,另一塊為黃金為矩形,可以遞歸劃分。38維納斯雕像,被視為女性體型美的標準。(1)人的肚躋位于人體身高的黃金分割點。

(2)肚躋以上,頸部是黃金分割點。(3)肚躋以下,膝蓋是黃金分割點。點F為線段CA黃金分割點。點G為線段CF黃金分割點。黃金比例黃金三角形39黃金矩形的頂角位于十二面體的十二個表面中心。設(shè)黃金矩形的短邊半邊長為b,則黃金矩形的長邊半邊長為a=b/。表9-10為正十二面體的頂點表。頂點x坐標y坐標z坐標V0x0=ay0=az0=aV1x1=a+by1=0z1=bV2x2=ay2=-az2=aV3x3=0y3=-bz3=a+bV4x4=0y4=bz4=a+bV5x5=a+by5=0z5=-bV6x6=ay6=az6=-aV7x7=by7=a+bz7=0V8x8=-by8=a+bz8=0V9x9=-ay9=az9=-a表9-10正十二面體頂點表接下頁40頂點x坐標y坐標z坐標V10x10=0y10=bz10=-a-bV11x11=ay11=-az11=-aV12x12=by12=-a-bz12=0V13x13=-by13=-a-bz13=0V14x14=-a-by14=0z14=bV15x15=-ay15=az15=aV16x16=-ay16=-az16=-aV17x17=0y17=-bz17=-a-bV18x18=-ay18=-az18=aV19x19=-a-by19=0z19=-b41圖9-23正十二面體展開圖42表9-11正十二面體面表面第1頂點第2頂點第3頂點第4頂點第5頂點F0078154F1610987F215670F31212115F41112131617F523181312F604321F734151418F851117106F9910171619F1089191415F11131814191643正十二面體模型44〔4〕正二十面體

圖9-24中三個黃金矩形兩兩正交,這些矩形的頂角是正二十面體的十二個頂點。把每一個黃金矩形與一個坐標軸對齊,得到表9-12的頂點表。由圖9-25所示的正二十面體展開圖得到正二十面體的面表,見表9-13。

圖9-24用黃金矩形定義正二十面體45表9-12正二十面體頂點表頂點x坐標y坐標z坐標V0x0=0y0=az0=bV1x1=0y1=az1=-bV2x2=ay2=bz2=0V3x3=ay3=-bz3=0V4x4=0y4=-az4=-bV5x5=0y3=-az5=bV6x6=by6=0z6=aV7x7=-by7=0z7=aV8x8=by8=0z8=-aV9x9=-by9=0z9=-aV10x10=-ay10=bz10=0V11x11=-ay11=-bz11=046圖9-25正二十面體展開圖47表9-13正二十面體面表面第一個頂點第二個頂點第三個頂點F0062F1263F2365F3567F4076F5238F6128F702148表9-13正二十面體面表面第一個頂點第二個頂點第三個頂點F8010F91910F10189F11348F12354F134511F1471011F15010749表9-13正二十面體面表面第一個頂點第二個頂點第三個頂點F164119F17498F185711F199111050正二十面體模型51多面體是由平面多邊形組成的物體,多面體沒有方程表示形式,用頂點表和面表直接給出數(shù)據(jù)結(jié)構(gòu)定義。對于球、圓柱、圓錐、圓環(huán)等光滑物體,表面有確定的參數(shù)方程表示形式。繪制光滑物體時,需要進行網(wǎng)格劃分,即把光滑曲面離散為平面多邊形表示,這些多邊形一般為平面四邊形或三角形網(wǎng)格。光滑物體的網(wǎng)格頂點表和面表使用物體的參數(shù)方程離散計算后得到。2.光滑物體52〔1〕球面球心在原點,半徑為r的球面三維坐標系如圖9-26所示。球面的參數(shù)方程表示為圖9-26球面的數(shù)學模型(9-2)53假定將球面劃分為n1=4個緯度區(qū)域,n2=8個經(jīng)度區(qū)域。則緯度方向的角度增量和經(jīng)度方向的角度增量均為α=β=45°,示例球面的網(wǎng)格模型如圖9-27所示。

圖9-27示例球面

54球面共有(n1-1)*n2+2=26個頂點。頂點索引號為0~25。北極點序號為0,然后從z軸正向開始,繞y軸按逆時針方向確定位于第一條緯度線上與各條經(jīng)度線相交的點,如圖9-28和圖9-29所示,最后一個頂點為南極點。北極點坐標為V0(0,r,0),南極點坐標為V25(0,-r,0)。圖9-28北半球頂點編號圖9-29南半球頂點編號55面表用二維數(shù)組定義,第一維表示緯度自北極向南極遞增的方向,第二維表示在同一緯度線上從z軸正向開始,繞y軸的逆時針方向。如圖9-30和圖9-31所示。所有網(wǎng)格的頂點排列順序應(yīng)以小面的法線指向球面外部的右手法則為準。圖9-30北半球表面編號圖9-31南半球表面編號56球面網(wǎng)格化的方法分為:地理劃分法如圖9-32所示。

遞歸劃分法原理如圖9-33所示,效果如圖9-34所示。圖9-32地理劃分法效果圖圖9-33遞歸劃分法效果圖57

(a)遞歸深度n=0(b)遞歸深度n=1

(c)遞歸深度n=2(d)遞歸深度n=3

圖9-34球面遞歸劃分法效果圖58〔2〕圓柱面假定圓柱的中心軸與y軸重合,橫截面是半徑為r的圓,圓柱的高度沿著y軸方向從0拉伸到h,三維坐標系原點O位于底面中心,如圖9-35所示。如果不考慮頂面和底面,圓柱側(cè)面的參數(shù)方程為圖9-35圓柱面的數(shù)學模型(9-3)

59圓柱的離散化表示如圖9-36所示。假定圓柱的周向網(wǎng)格數(shù)n1=8,縱向網(wǎng)格數(shù)n2=3,圓柱網(wǎng)格模型的頂點表的頂點數(shù)為:n1×(n2+1)+2=34。頂面和底面各有8個三角形網(wǎng)格,側(cè)面有24個四邊形網(wǎng)格,圓柱網(wǎng)格模型的面表的面片總數(shù)為40。

圖9-36示例圓柱60

示例圓柱面的頂點和表面編號如圖9-37~圖9-39所示。圖9-37圓柱底面的網(wǎng)格劃分圖9-38圓柱的頂面的網(wǎng)格劃分圖9-39圓柱側(cè)面的網(wǎng)格劃分61適當加大周向和縱向劃分的網(wǎng)格數(shù),圓柱面網(wǎng)格模型趨向光滑,透視投影效果如圖9-39所示。圖9-40圓柱的網(wǎng)格模型透視效果圖62〔3〕圓錐面假定圓錐的中心軸與y軸重合,橫截面的最大半徑為r,最小半徑為0,圓錐的高度沿著y軸方向從0拉伸到h,三維坐標系原點O位于底面中心,如圖9-41所示。圖9-41圓錐面的數(shù)學模型圓錐側(cè)面的參數(shù)方程為(9-4)63圓錐側(cè)面的離散化表示如圖9-42所示,側(cè)面使用三角形網(wǎng)格和四邊形網(wǎng)格逼近。圖9-42示例圓錐圓錐底面使用三角形網(wǎng)格逼近,如圖9-43所示。圖9-43圓錐底面的網(wǎng)格劃分64圖9-45圓錐側(cè)面的四邊形網(wǎng)格劃分假定圓錐的周向網(wǎng)格數(shù)n1=8,縱向網(wǎng)格數(shù)n2=3,網(wǎng)格側(cè)面的頂點總數(shù)為:n1×n2,加上錐頂和底面的中心頂點,圓錐網(wǎng)格模型的頂點數(shù)為:n1×n2+2=26。圓錐底面劃分為8個三角形網(wǎng)格,側(cè)面有8個三角形網(wǎng)格和16個四邊形網(wǎng)格,圓錐網(wǎng)格模型的面片總數(shù)為32。示例圓錐面的頂點和表面編號如圖9-43~圖9-45所示。圖9-44圓錐側(cè)面的三角形網(wǎng)格劃分65

圖9-46圓錐的網(wǎng)格模型透視效果圖66〔4〕圓環(huán)面圓環(huán)面由一個在xOy面內(nèi)偏置的圓周繞y軸進行旋轉(zhuǎn)掃掠而成,如圖9-47所示。環(huán)體半徑為r1,截面半徑為r2。圖9-47實心偏置圓周掃掠成圓環(huán)面67建立右手坐標系Oxyz,原點位于圓環(huán)中心,x軸水平向右,y軸鉛直向上,z軸指向觀察者,圓環(huán)面的回轉(zhuǎn)中心位于三維坐標系原點O。沿著環(huán)體的中心線建立右手動態(tài)參考坐標系O’x’y’z’,O’點位于環(huán)體的中心線上,x’軸沿著矢徑O’O的方向向外,y’軸與y軸同向,z’軸沿著環(huán)體中心線的切線的順時針方向,如圖9-48所示。圖9-48圓環(huán)面的數(shù)學模型68圓環(huán)面的參數(shù)方程為示例圓環(huán)面的頂點編號和面表編號如圖9-50所示。(9-5)圖9-50圓環(huán)面的頂點和表面劃分69圖9-50圓環(huán)面的網(wǎng)格模型透視圖適當加大周向和縱向劃分的網(wǎng)格數(shù),圓環(huán)面網(wǎng)格模型趨向光滑,透視投影效果如圖9-51所示。圖9-50消隱環(huán)709.2消隱算法分類根據(jù)消隱方法的不同,消隱算法可分為兩類:(1)隱線算法。用于消除物體上不可見的邊界線。隱線算法主要是針對線框模型提出的,它只要求畫出物體的各可見棱邊,如圖9-51所示。(2)隱面算法。用于消除物體上不可見的表面。隱面算法主要是針對表面模型提出的,一般不繪制物體的可見棱邊,只使用指定顏色填充物體的各可見表面,如圖9-52所示。

圖9-51隱線算法

圖9-52隱面算法

71計算機圖形學的創(chuàng)始人Sutherland根據(jù)消隱空間的不同,將消隱算法分為3類:(1)物體空間法。物體空間消隱算法主要在三維觀察空間中完成。根據(jù)模型的幾何關(guān)系來判斷哪些表面可見,哪些表面不可見。(2)圖像空間法。圖像空間消隱算法主要在物體投影后的二維圖像空間中利用幀緩沖信息確定哪些表面遮擋了其它表面。圖像空間法受限于顯示器的分辨率。(3)物像空間法。在描述物體的三維觀察空間和二維圖像空間中同時進行消隱。729.3隱線算法9.3.1凸多面體消隱算法

對于凸多面體的任一個面,根據(jù)其外法矢量和視矢量的夾角θ來進行可見性檢測。如果兩個矢量的夾角0°≤θ≤90°時,表示該表面可見;如果90°<θ≤180°時,表示該表面不可見。圖9-53凸多面體消隱原理以圖9-53所示的立方體為例來進行具體說明。73通過各個表面的三維頂點坐標,可以計算該表面的外法矢量。對于“前面”V4V5V6V7,取V4點為參考點。前面的外法矢量可以表示為:式中,i,j,k為三維坐標系的標準單位矢量該點的外法矢量(9-6)74給定視點位置球面坐標表示為:(

),,其中:R為視徑,

,

。視矢量從多邊形的參考點V4的指向視點,視矢量分量的計算公式為:視矢量表示為:式中,i,j,k為三維坐標系的標準單位矢量。(9-7)75表面外法矢量和視矢量的數(shù)量積為:將外法矢量N和視矢量S單位化為n和s,則有可見cosθ的正負取決于表面的單位外法矢量和單位視矢量的數(shù)量積:(9-8)凸多面體表面可見性檢測條件如下:當0°≤θ<90°時,表面可見,畫出表面多邊形邊界。76當θ=90°時,表面外法矢量與視矢量垂直,表面多邊形退化為一條直線,繪制結(jié)果為一段直線;當90°<θ≤180°時,凸多面體表面不可見,不繪制該多邊形邊界。因此,可以將作為繪制表面的基本條件。對于立方體而言,使用只繪制朝向視點的3個可見表面。因此本算法也被稱為背面剔除(backculling)算法。剔除了背向視點的不可見表面77立方體消隱前的透視變換圖如圖9-54所示,畫出了全部6個表面的線框;消隱后的透視變換圖如圖9-55所示,只畫出可見的表面棱邊。圖9-54消隱前的立方體透視投影圖9-55消隱后的立方體透視投影78

圖9-57立方體虛線消隱圖9-58正八面體虛線消隱圖9-59正十二面體虛線消隱圖9-60正二十面體虛線消隱799.3.2曲面體消隱算法曲面體可以采用有限單元法劃分為若干個小曲面區(qū)域。常采用四邊形平面片或三角形平面片來逼近曲面體。消隱主要是確定各四邊形平面片或三角形平面片的可見性,與凸多面體消隱類似,即用外法矢量和視矢量的數(shù)量積來進行可見性檢測。球面可用參數(shù)簇和參數(shù)曲線簇所構(gòu)成的四邊形經(jīng)緯網(wǎng)格來表示,如圖9-61所示。設(shè)相鄰的兩條緯線分別為0、1,相鄰的兩條經(jīng)線分別為0、1,則四邊形平面片V0V1V2V3各點的坐標為:V0(0,0)、V1(1,0)、V2(1,1)、V3(0,1)。80以V1V0和V2V0為邊矢量,計算四邊形平面片的V0V1V2V3外法矢量為:圖9-60球的經(jīng)緯網(wǎng)格(9-9)給定視點位置球面坐標表示為:(,,)對于四邊形平面片V0V1V2V3的參考點V0(0,0),視矢量分量的計算公式為81式中,R為視點的矢徑,和為視點的位置角。r為球面的半徑,0和0為球面上一點V0的位置角。四邊形平面片V0V1V2V3的參考點V0(0,0)的法矢量N的計算方法與凸多面體類似。球面上V0(0,0)點的平均外法矢量可以使用該點的位置矢量代替。將法矢量N規(guī)范化為單位矢量n,視矢量S規(guī)范化為單位矢量s,有82球面網(wǎng)格四邊形平面片可見性檢測條件為:當繪制該面片。球面線框模型消隱前的透視變換圖如圖9-62所示,北極點和南極點同時繪制出來,無法確認北極點面向讀者還是南極點面向讀者。圖9-62消隱前的球面透視投影圖9-63消隱后的球面透視投影使用背面剔除算法后,可以看出圖9-62中球面的北極點面向讀者,如圖9-63所示。839.4隱面算法從視點的角度觀察物體的表面,離視點近的表面的投影遮擋了離視點遠的表面的投影,屏幕上的繪制結(jié)果為所有可見表面最終投影的集合。常用的消隱有兩種:深度緩沖器算法和深度排序算法。9.4.1深度緩沖器算法

1.算法原理深度緩沖器算法于1974年由Catmull提出,屬于圖像空間消隱算法。在物空間內(nèi)不對物體表面的可見性進行檢測,在像空間中根據(jù)每個像素的深度值確定最終繪制的物體表面上各個像素的顏色。也稱為Z-Buffer算法。EdwinEarlCatmull84Z-Buffer算法建立兩個緩沖器:深度緩沖器,用以存儲圖像空間中每一像素相應(yīng)的深度值,初始化為最大深度值(zs坐標)。幀緩沖器,用以存儲圖像空間中的每個像素的顏色,初始化為屏幕的背景色。

852.算法描述幀緩沖器初始值置為背景色。確定深度緩沖器的寬度、高度和初始深度。一般將初始深度置為最大深度值。對于多邊形表面中的每一像素(xs,ys),計算其深度值zs(xs,ys)。將zs(xs,ys)與存儲在z緩沖器中該位置的深度值zBuffer(xs,ys)進行比較。如果zs(xs,ys)≤zBuffer(xs,ys),則將此像素的顏色寫入幀緩沖器,且用z(xs,ys)重置zbuffer(xs,ys)。863.計算深度

若多邊形的平面方程已知,一般采用增量法計算掃描線上每一像素點的深度值。當立方體旋轉(zhuǎn)到圖9-65所示的位置時,六個表面都不與投影面xOy面平行,這時需要根據(jù)每個表面的平面方程計算多邊形內(nèi)各個像素點的深度值。視線方向圖9-65旋轉(zhuǎn)立方體圖9-66旋轉(zhuǎn)立方體的任一表面87圖9-66所示的一個立方體表面,其平面一般方程為:系數(shù)A,B,C是該平面的一個法矢量N的坐標,即根據(jù)表面頂點的坐標可以計算出兩個邊矢量根據(jù)兩個邊矢量的叉積,可求得表面的法矢量N,得到系數(shù)A,B,C(9-10)88將A、B、C和點(x0,y0,z0)代入方程(9-10),得從方程(9-10)得到當前像素點(x,y)處的深度值89已知掃描線yi與多邊形相交的左邊界的像素(xi,yi)的深度值為z(xi,yi),其相鄰點(xi+1,yi)處的深度值為z(xi+1,yi)。由此可以計算出該掃描線上的所有后續(xù)像素點的深度值。同一掃描線上的深度增量可由一步加法完成。式中,為深度步長。下一條掃描線y=y(tǒng)i+1,其最左邊的像素點坐標的x值為式中,k為有效邊的斜率90用深度d初始化寬度為w、高度為h的深度緩沖器的代碼如下。voidCZBuffer::InitDeepBuffer(intw,inth,doubled)//初始化深度緩沖器{

zBuffer=newdouble*[w]; for(inti=0;i<w;i++) zBuffer[i]=newdouble[h]; for(i=0;i<w;i++) for(intj=0;j<h;j++) zBuffer[i][j]=double(d);

}91一般將物體的回轉(zhuǎn)中心放置在自定義的屏幕坐標系原點,也即位于屏幕中心。為了避免深度緩沖區(qū)數(shù)組zBuffer下標的索引號為負值,二維深度緩沖區(qū)數(shù)組采用zBuffer[xs+w/2][ys+h/2]進行匹配。

圖9-67匹配深度緩沖器數(shù)組的下標92真實感場景中一般繪制的是物體的透視投影,在第6章中公式(6-55)僅計算了屏幕坐標系的二維坐標。使用深度緩沖器算法繪制物體的透視圖時,需要在透視變換后保留物體的深度值。設(shè)視域四棱臺的近剪切面為Near,遠剪切面為Far式中(xv,yv,zv)為觀察坐標系中的坐標,(xs,ys,zs)為屏幕坐標系中的坐標。93圖9-68中,觀察坐標系中從視點出發(fā)的視線會聚于視點。屏幕坐標系中,視線被映射為平行線。因而,只有在屏幕坐標系中具有相同(xs,ys)的點才可能發(fā)生遮擋,判別一個點是否位于另一個點的前面則可簡化為zs值的比較。

(a)觀察坐標系(b)屏幕坐標系圖9-68立方體視線的變換94圖9-69中,紅、綠、藍三角形的深度相互交叉,無法區(qū)分前后順序。使用z-buffer算法根據(jù)三角形上每一點的深度值填充顏色,則可以很方便地消隱。圖9-69交叉三角形消隱95一些特殊的凹多面體如圓環(huán),繪制線框模型時,使用背面剔除算法并不能完全消除隱藏線。當環(huán)面垂直于于投影面時,消隱結(jié)果存在錯誤,如圖9-70所示。原因是保留了內(nèi)環(huán)面的前面和外環(huán)面的前面。圓環(huán)線框模型的消隱需要使用專門針對凹多邊形設(shè)計的算法實現(xiàn)。但如使用z-buffer算法繪制圓環(huán)的表面模型,則可以得到正確結(jié)果,如圖9-71所示,

圖9-70圓環(huán)線框模型消隱圖9-71圓環(huán)表面模型消隱消隱969.4.2深度排序算法

深度排序算法是同時運用物體空間和圖像空間的消隱算法。在物體空間中將表面按深度優(yōu)先級排序,然后在圖像空間中,由深度最大的表面開始,依次繪制各個表面。這種消隱算法通常被稱為畫家算法。深度排序算法的原理是:先把屏幕置成背景色,再把物體的各個面按其離視點的遠近排序形成深度優(yōu)先級表,離視點遠者位于表頭,離視點近者位于表尾。然后按照從表頭到表尾的順序繪制各個表面,后畫的表面顏色取代先畫的表面顏色,相當于消除了隱藏面。在算法上需要構(gòu)造頂點表、面表來實現(xiàn)。97深度優(yōu)先級排序算法的難點在于確定物體的深度優(yōu)先級。對于圖9-72所示的4個條相互疊壓(稱為疊壓條),每個條有一個獨立的深度,而且4個條的深度彼此不同,則可以直接建立一個確定的深度優(yōu)先級表。對于圖9-73的4個條相互交叉(稱為交叉條),每個條至少有兩個深度,不能簡單地建立深度優(yōu)先級表。解決方法是沿著圖中虛線循環(huán)地分割每個條,直至最終可建立確定的深度優(yōu)先級表,另一種解決方法是使用深度緩沖器算法直接繪制交叉條。使用深度排序算法繪制的疊壓條如圖9-74所示。使用深度緩沖算法繪制的交叉條如圖9-75所示。98

圖9-72疊壓條線框模型圖9-73交叉條線框模型

圖9-72疊壓條表面模型圖9-73交叉條表面模型圖9-74疊壓條表面模型圖9-75交叉條表面模型999.5本章小結(jié)

本章主要講述多面體和光滑物體的數(shù)學模型建立方法。根據(jù)頂點表和面表繪制物體的三維模型。三維圖形的消隱算法分為隱線算法和隱面算法。隱線算法主要針對線框模型進行,只根據(jù)表面法矢量和視矢量的夾角就可以進行背面剔除。凸多面體隱線算法也是一種隱面算法,是通過判斷表面免的可見性后才繪制面的邊界,只不過該方法可用于繪制線框模型,才稱為隱線算法。隱面算法中重點講解了z-buffer算法,該算法是計算機圖形學中最主要的消隱算法。一般先對物體的多邊形表面進行背面剔除預(yù)處理,然后才對可見表面使用基于有效邊表算法的z-buffer算法,從像素級角度對物體消隱。100習題9圖9-76所示為正四面體,使用MFC編程實現(xiàn)正四面體的透視投影動態(tài)隱線算法。這里的”動態(tài)”是指使用鍵盤方向鍵或動畫按鈕可以對正四面體進行任意角度的旋轉(zhuǎn)。圖9-76正四面體消隱線框模型1012.圖9-77所示為正三棱柱線框模型,使用MFC編程實現(xiàn)正三棱柱的透視投影動態(tài)隱線算法。圖9-77正三棱柱消隱線框模型1023.立方體的表面F0可以通過四個頂點V0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論