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

下載本文檔

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

文檔簡(jiǎn)介

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

9.2消隱算法分類

9.3隱線算法

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

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

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

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

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

如圖9-12所示,包括頂點(diǎn)的三維坐標(biāo)(x,y,z)圖9-12三維頂點(diǎn)類

202.定義表面類

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

213.讀入立方體的點(diǎn)表

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

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

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

32表9-8正八面體頂點(diǎn)表

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

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

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

(2)肚躋以上,頸部是黃金分割點(diǎn)。(3)肚躋以下,膝蓋是黃金分割點(diǎn)。點(diǎn)F為線段CA黃金分割點(diǎn)。點(diǎn)G為線段CF黃金分割點(diǎn)。黃金比例黃金三角形39黃金矩形的頂角位于十二面體的十二個(gè)表面中心。設(shè)黃金矩形的短邊半邊長(zhǎng)為b,則黃金矩形的長(zhǎng)邊半邊長(zhǎng)為a=b/。表9-10為正十二面體的頂點(diǎn)表。頂點(diǎn)x坐標(biāo)y坐標(biāo)z坐標(biāo)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正十二面體頂點(diǎn)表接下頁40頂點(diǎn)x坐標(biāo)y坐標(biāo)z坐標(biāo)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頂點(diǎn)第2頂點(diǎn)第3頂點(diǎn)第4頂點(diǎn)第5頂點(diǎn)F0078154F1610987F215670F31212115F41112131617F523181312F604321F734151418F851117106F9910171619F1089191415F11131814191643正十二面體模型44〔4〕正二十面體

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

圖9-24用黃金矩形定義正二十面體45表9-12正二十面體頂點(diǎn)表頂點(diǎn)x坐標(biāo)y坐標(biāo)z坐標(biāo)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正二十面體面表面第一個(gè)頂點(diǎn)第二個(gè)頂點(diǎn)第三個(gè)頂點(diǎn)F0062F1263F2365F3567F4076F5238F6128F702148表9-13正二十面體面表面第一個(gè)頂點(diǎn)第二個(gè)頂點(diǎn)第三個(gè)頂點(diǎn)F8010F91910F10189F11348F12354F134511F1471011F15010749表9-13正二十面體面表面第一個(gè)頂點(diǎn)第二個(gè)頂點(diǎn)第三個(gè)頂點(diǎn)F164119F17498F185711F199111050正二十面體模型51多面體是由平面多邊形組成的物體,多面體沒有方程表示形式,用頂點(diǎn)表和面表直接給出數(shù)據(jù)結(jié)構(gòu)定義。對(duì)于球、圓柱、圓錐、圓環(huán)等光滑物體,表面有確定的參數(shù)方程表示形式。繪制光滑物體時(shí),需要進(jìn)行網(wǎng)格劃分,即把光滑曲面離散為平面多邊形表示,這些多邊形一般為平面四邊形或三角形網(wǎng)格。光滑物體的網(wǎng)格頂點(diǎn)表和面表使用物體的參數(shù)方程離散計(jì)算后得到。2.光滑物體52〔1〕球面球心在原點(diǎn),半徑為r的球面三維坐標(biāo)系如圖9-26所示。球面的參數(shù)方程表示為圖9-26球面的數(shù)學(xué)模型(9-2)53假定將球面劃分為n1=4個(gè)緯度區(qū)域,n2=8個(gè)經(jīng)度區(qū)域。則緯度方向的角度增量和經(jīng)度方向的角度增量均為α=β=45°,示例球面的網(wǎng)格模型如圖9-27所示。

圖9-27示例球面

54球面共有(n1-1)*n2+2=26個(gè)頂點(diǎn)。頂點(diǎn)索引號(hào)為0~25。北極點(diǎn)序號(hào)為0,然后從z軸正向開始,繞y軸按逆時(shí)針方向確定位于第一條緯度線上與各條經(jīng)度線相交的點(diǎn),如圖9-28和圖9-29所示,最后一個(gè)頂點(diǎn)為南極點(diǎn)。北極點(diǎn)坐標(biāo)為V0(0,r,0),南極點(diǎn)坐標(biāo)為V25(0,-r,0)。圖9-28北半球頂點(diǎn)編號(hào)圖9-29南半球頂點(diǎn)編號(hào)55面表用二維數(shù)組定義,第一維表示緯度自北極向南極遞增的方向,第二維表示在同一緯度線上從z軸正向開始,繞y軸的逆時(shí)針方向。如圖9-30和圖9-31所示。所有網(wǎng)格的頂點(diǎn)排列順序應(yīng)以小面的法線指向球面外部的右手法則為準(zhǔn)。圖9-30北半球表面編號(hào)圖9-31南半球表面編號(hào)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,三維坐標(biāo)系原點(diǎn)O位于底面中心,如圖9-35所示。如果不考慮頂面和底面,圓柱側(cè)面的參數(shù)方程為圖9-35圓柱面的數(shù)學(xué)模型(9-3)

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

圖9-36示例圓柱60

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

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

圖9-51隱線算法

圖9-52隱面算法

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

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

),,其中:R為視徑,

,

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

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

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

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

若多邊形的平面方程已知,一般采用增量法計(jì)算掃描線上每一像素點(diǎn)的深度值。當(dāng)立方體旋轉(zhuǎn)到圖9-65所示的位置時(shí),六個(gè)表面都不與投影面xOy面平行,這時(shí)需要根據(jù)每個(gè)表面的平面方程計(jì)算多邊形內(nèi)各個(gè)像素點(diǎn)的深度值。視線方向圖9-65旋轉(zhuǎn)立方體圖9-66旋轉(zhuǎn)立方體的任一表面87圖9-66所示的一個(gè)立方體表面,其平面一般方程為:系數(shù)A,B,C是該平面的一個(gè)法矢量N的坐標(biāo),即根據(jù)表面頂點(diǎn)的坐標(biāo)可以計(jì)算出兩個(gè)邊矢量根據(jù)兩個(gè)邊矢量的叉積,可求得表面的法矢量N,得到系數(shù)A,B,C(9-10)88將A、B、C和點(diǎn)(x0,y0,z0)代入方程(9-10),得從方程(9-10)得到當(dāng)前像素點(diǎn)(x,y)處的深度值89已知掃描線yi與多邊形相交的左邊界的像素(xi,yi)的深度值為z(xi,yi),其相鄰點(diǎn)(xi+1,yi)處的深度值為z(xi+1,yi)。由此可以計(jì)算出該掃描線上的所有后續(xù)像素點(diǎn)的深度值。同一掃描線上的深度增量可由一步加法完成。式中,為深度步長(zhǎng)。下一條掃描線y=y(tǒng)i+1,其最左邊的像素點(diǎn)坐標(biāo)的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)中心放置在自定義的屏幕坐標(biāo)系原點(diǎn),也即位于屏幕中心。為了避免深度緩沖區(qū)數(shù)組zBuffer下標(biāo)的索引號(hào)為負(fù)值,二維深度緩沖區(qū)數(shù)組采用zBuffer[xs+w/2][ys+h/2]進(jìn)行匹配。

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

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

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

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

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

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

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論