



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Computer Graphics第六章 三維空間的觀察Computer Graphics 第六章 三維空間的觀察v 主要討論 投影的數(shù)學(xué)表示 三維觀察中的投影 視見體到規(guī)范視見體的變換 用三維規(guī)范體裁剪在三維視見體內(nèi)裁剪三維物體投影變換至視口二維圖形圖6.1 三維觀察的概念模型Computer Graphics 6.1 投 影 v 什么是投影變換什么是投影變換( (或投影變換的作用或投影變換的作用):): 由于顯示器和繪圖機只能用二維空間來表示圖形,要顯示三維圖形就要把三維坐標表示的幾何形體變換成二維坐標表示的圖形,這就是圖形的投影變換投影變換。v 投影變換的要素投影變換的要素 視點(投影中
2、心),投影平面 投影線,投影v 投影變換的類型投影變換的類型 透視投影透視投影:投影中心和投影面之間的距離是有限的 平行投影平行投影:投影中心和投影平面之間的距離是無限的 根據(jù)投影方向與投影平面之間的關(guān)系,平行投影分為正投影正投影與斜投影斜投影視點投影平面投影線Computer Graphics 6.1.1 透視投影 圖6.3 為 的投影PQCoPQCxyzPQ圖6.4 在 平面上的正投影oxzPQCzxo pxxcxzcz 在坐標系 中來討論投影,假定投影平面是 。設(shè)視點 ,空間中任一點 在 平面上的投影為 zyxo0z) , ,(ccczyxC) , ,(zyxQ0z)0 , ,(ppyx
3、P,如圖6.3所示,則下式成立: ccccpccpzzzyyyyxxxx(6.1) Computer Graphics平面上的正投影分別為 透視投影的計算公式,Q,PC,Q,PCzxo設(shè) 在則式(6.1)的幾何意義如圖6.4所示。zzzyyyyzzzxxxxccccpccccp)()((6.2) 寫成齊次坐標表達式為:11000000zyxzyzxzqyxcccccqq(6.3) qyyqxxqpqp ,(6.4) 由式(6.1)得:圖6.3 為 的投影PQCoPQCxyzPQ圖6.4 在 平面上的正投影oxzPQCzxo pxxcxzczComputer Graphics 6.1.2 平行投
4、影 v 平行投影分為正投影與斜投影 正投影正投影:投影方向與投影平面法向相同。常見的正投影類型有: 正視圖投影: 俯視圖投影: 側(cè)視圖投影: 等軸測投影:投影平面的法向與每個坐標軸的夾角相等; 斜投影斜投影,常見的斜投影類型有: 斜等測投影:投影方向與投影平面成45度角; 斜二測投影:投影方向和投影平面的夾角為arctan(2)。圖6.5 三視圖正 視圖側(cè) 視圖原 物體俯視圖(a)斜等測投影(b)斜二測投影圖6.6 斜投影Computer Graphics軸測投影 axonometric projectionv軸測投影是平行投影的一種,可以使三個坐標面在一個投影上都能看到,從而具有立體感。v定
5、義:將物體連同其參考直角坐標系,沿不平行于任一坐標面的方向,用平行投影法將其投射在一個投影面上所得到的圖形。 Computer Graphics軸測投影v通過軸測投影繪出的圖形,稱為“軸測圖”。軸測圖在工程技術(shù)及其他科學(xué)中常有應(yīng)用。v在軸側(cè)圖中,物體上與任一坐標軸平行的長度均可按一定的比率來量度。三軸向的比率都相同時稱為“等測投影”,其中兩軸向比率相同時稱為“二測投影”,三軸向比率均不相同時稱為“三測投影”。軸測投影中投射線與投影面垂直的稱為“正軸測投影”,傾斜的稱為“斜軸測投影”。Computer Graphics 平行投影變換公式 設(shè)投影方向為 ,空間點 在投影平面上的投影為 ,由于是沿
6、方向投影,所以下式成立: ) , ,(dddzyx) , ,(zyx)0 , ,(ppyx) , ,(dddzyxddpdpzzyyyxxx(6.5) 所以zzyyyzzxxxddpddp(6.6) 式(6.6)是平行投影的計算公式,寫成齊次坐標表達式為: 10001010001ddqqddxxzxyyyzzq (6.7) 投影中心在無窮遠處平行投影) , ,(zyxComputer Graphics 6.1.3 任意坐標系到觀察坐標系中的變換 v 滅點滅點:一組不平行于投影平面的平行線,經(jīng)過透視投影后相交于一點,稱為滅點。v 主滅點主滅點:如果這組平行線平行于坐標軸,這時的滅點稱為主滅點,至
7、多存在三個主滅點,分別對應(yīng)于投影平面切割的坐標軸的數(shù)目。v 透視投影按主滅點的個數(shù)分為一點透視一點透視、二點透二點透視視和三點透視三點透視。圖6.7 一點透視圖6.9 三點透視圖6.8 兩點透視Computer Graphics在坐標系oxyz中來討論投影問題。確定一個投影面:一個參考點 和投影平面的法線方向 。還要指定 的方向,為此要給定一個向量 ,U在投影平面上的垂直投影所指的方向便是 軸的方向。取過 點沿N方向作的射線定為 軸 觀察坐標系 的建立 o ox xy yz z圖6.10 投影平面的指定NyOxzUoxyz) nnnzyxN,(, , )uuuxyzUyoozoyo)(000,
8、z,yxo Computer Graphics設(shè) 是點 在坐標系oxyz中的坐標, , 和 軸的單位方向向量為 、 和 ,那么從坐標系oxyz到的變換是 坐標變換公式oxoyozo000(, , )xyz),(131211aaa),(232221aaa),(333231aaazyxo(6.8)011121321222303132330 xxxaaayaaayyzaaazz 設(shè) 、 和 軸的單位方向向量分別為i,j,k。 軸和N方向一致,故有zo 軸和向量UN方向一致,設(shè)xo其中x, y和z分別為ox, oy, oz軸的單位方向向量,則 軸的單位方向向量應(yīng)是 和 軸的單位向量的向量積,因此yox
9、ozoxoyozo313233222(,)(,)nnnnnnaaaxyzxyzkzyxzyxNU321bbbzyxzyxnnnuuu232221321131211),(),(bbbbbbaaai212223133212331133133112311132(,)(,) aaaa aa aa aa aa aa ajComputer Graphics 齊次坐標形式在坐標系oxyz中給定的投影方向和視點的坐標都可用式(6.8)變換到坐標系 中的量 和 。zyxo),(dddzyx ),(ccczyx 式(6.8)寫成齊次坐標表達式為 111213142122232431323334100011xaaa
10、axyaaaayzaaaaz (6.9) 其中 4102030(), 1,2,3iiiiaa xa ya zi (6.8)011121321222303132330 xxxaaayaaayyzaaazz Computer Graphics 坐標系oxyz中任一點(x, y, z) 在投影平面上的投影把式(6.9)代入式(6.3)得110001000000343332312423222114131211zyxaaaaaaaaaaaazyzxzqyxcccccqq13433323134243323322231213414331332123111zyxazaaaayazayazayazayazaxa
11、zaxazaxazaxazccccccccccccccccc(6.10) 坐標系oxyz中任一點(x, y, z),由(6.10)和(6.4)便可求得它在投影平面上的投影點 。 (, ,0)ppxy (6.4), pqpqxxqyyq平行投影時,由式(6.7)和(6.9),得 111213142122232431323334100010000110001ddqqddxaaaaxzxaaaayyyaaaazzq 1131123213331434213122322333243410001ddddddddddddddddxxxxaaaaaaaaxzzzzyyyyyaaaaaaaazzzzz (6.1
12、1) Computer Graphics 6.1.4射影變換 做三維裁剪或消除隱藏線時,可把一個對象的透視圖看成另一個對象的在同一投影平面上的正視圖,并要求兩個對象對應(yīng)點坐標分量 的排序一致。后一個對象可以通過前一個對象做下述射影變換得到,zzzBzAzcpBzAzzzBzAzzzbbbcfffc)()(zzzxxxxccccp)(zzzyyyyccccp)(BzAzzBzAzzbbcffc)()(,cfbfbAzzz Bz z所以(6.12)(6.13)對于三維裁剪來說,希望變換 不改變?nèi)S窗口前后平面 = 和 = 的位置,這時式(4.16)中的A和B應(yīng)取成zfzzbz代入投影平面透視投影平
13、行投影圖6.12 由透視投影變換到平行投影Computer Graphics變換為單調(diào)遞增函數(shù)由上式求導(dǎo)得 為單調(diào)遞增函數(shù),只要 便是 的單調(diào)遞增函數(shù),可保證兩個對象對應(yīng)點按坐標分量的排序是一致的。 zzBzAzcp2)(zzBzAzdzdccpcczzBzA, 0zpzpzbfbfczzBzzzA ,由得, ,bcfczzzz只要 則 )(bcfcczzzzBzAcczzBzA, 0Computer Graphics 射影變換的齊次坐標表示 聯(lián)立式(6.2)和(6.12),則得到射影變換的齊次坐標表示 1100000000zyxzBAyzxzqzyxcccccqqq平行投影時,可直接取 zz
14、p(6.14) 式(6.6)和(6.14)就是在平行投影時所建立的一個仿射變換,變換的齊次坐標表示為: 100010001010001ddppddpxzxxyyyzzzq (6.2) (6.12)zzzyyyyzzzxxxxccccpccccp)()(zzBzAzcp (6.6) zzyyyzzxxxddpddpComputer Graphics 世界坐標至規(guī)范化坐標空間的變換,就是要把世界坐標系中的圖形變到規(guī)范化坐標系 中。這個變換把圖6.13中的平行六面體P1P2P3P4Q1Q2Q3Q4變成圖6.15中的單位立方體,把圖6.14中的棱臺P1P2P3P4Q1Q2Q3Q4變成圖6.16的棱臺。
15、 6.2 視見體到規(guī)范視見體的變換在規(guī)范化坐標系中定義了兩種視見體: 平行投影的視域由下列方程定義對透視來說,視見體是下列六個方程代表的平面圍成的棱臺vvvvzyxomin, , y, y, 1, vvvvvvvvvvxzxzzzzzz 1 , 0 , 1 , 0 , 1 , 0vvvvvvzzyyxx圖6.13 平行投影時定義的窗口P1P4P3P2Q2Q3Q4Q1A4A3A2A1圖6.14 透視時定義的窗口CP1P2P3P4Q1Q2Q3Q4A4A3A2A1xvzvyv111ov圖6.15 平行投影時的規(guī)范化空間yvxvzv圖6.16 透視時的規(guī)范化空間ovComputer Graphics
16、6.2.1平行投影視見體的規(guī)范化設(shè)圖Pi和Qi在世界坐標中的坐標為 。第一步要把點P1移到坐標原點,這個變換的矩陣為 經(jīng)變換TR后,平行六面體在 和 平面上的投影為圖6.17所示4 , 3 , 2 , 1 ), ,( ), ,( iyxQyxPiiiiii1111 ,yybxxbyx 1111000100010001RxyzT T圖6.17 平行六面體在兩個坐標平面上的投影zxozyo(a)bxby(b)xzzyComputer Graphics第二、三、四步變換第三步是長方體變?yōu)閱挝婚L的立方體。這個變換矩陣為111110001000100001xyHbzzbzzS S 10000)(0000
17、)(0000)(1111121231zzyyxxS S第二步對平行六面體做切變,使它成為一個長方體。這個切變的矩陣為第四步為把 z 軸反向,變換矩陣為10000100001000012S S由坐標系 到規(guī)范化坐標系的變換為TRHTvvvzyxzyx) 1 ,() 1 ,(12TSSSzyxo(a)bxby(b)xzzyComputer Graphics 6.2.2透視投影視見體的規(guī)范化 變換后,棱臺在 和 平面上的投影如上圖所示。2) 把經(jīng)過 變換后的棱臺變成正棱臺,其變換為zxozyoTR1) 把視點移至坐標原點,變換為3)進行單位化,變換矩陣為 10000)(0000)(0000)(111
18、121231czzyyxxS S4) 變換為把z軸反向,變換也是S2。 從坐標 變到坐標 的變換為zyxovvvvzyxo1000100010001cccRzyxT41121121002()20102()00100001cccHcxxxzzyyyzzSTRHTvvvzyxzyx) 1 ,() 1 ,(12TSSS4Computer Graphics 6.3 用三維規(guī)范體裁剪 在規(guī)范化坐標系中平行投影時,視見體是由方程x=0, x=1, y=0, y=1, z=0和z=1代表的六個平面圍成的立方體。透視時的視見體是棱臺,由方程x=z, x=z, y=z, y=z, z=zmin和z=1代表的六個
19、平面圍成圖6.19 兩種視見體Computer Graphics SutherlandCohen 算法推廣到三維判斷顯然不可見的線段的編碼應(yīng)為六位,這六位的安排是點在視見體左面,第1位為1,x0,(x1,(xz) 點在視見體下面,第3位為1,y0,(y1,(yz)點在視見體后面,第5位為1,z1,(z1) 點在視見體前面,第6位為1,z0,(zzmin) 括號中的條件適用于透視的情況。Computer Graphics 直線和視見體的邊界面的交點設(shè)線段的起點和終點: P1(x1, y1, z1)和P2(x2, y2, z2) ,直線方程為 x=x1+(x2x1)t, y=y1+(y2y1)t,
20、 z=z1+(z2z1)t和視見體的邊界面,例如y=1求交時, 把tL代入即可求得交點的坐標。求P1P2和平面x= -z的交點時,把直線方程代入x=-z中求得交點處的參數(shù)121 (1)/()Ltyyy)()(121211zzxxxztL121()()iiiiPAtPPNNComputer Graphics梁友棟Barsky 算法推廣到三維當視見體為立方體時,其推廣是直接的。當視見體為棱臺時,設(shè)121212,zzzyyyxxx相應(yīng)平面與線段的參數(shù)值為 BAFTBRLkrstkkk, , , , , /則:min1vvvvvvvvvvvxzxzyzyzzzz 111111111min11LRBTF
21、BAszxszxszyszyszzsz ()()LRBTFBArxzrxzryzryzrzrz ,Computer Graphicsbegin t0:=0; t1:=1; deltax:=x1x0; delatz:=z1z0; clipt (deltax, deltaz, x0 + z0, t0, t1); clipt (deltax, deltaz, z0 x0, t0, t1); deltay:=y1y0; clipt (deltay, deltaz, y0 + z0, t0, t1); clipt (deltay, deltaz, z0y0, t0, t1); clipt (deltaz
22、, z0zmin, t0, t1); clipt (deltaz, 1z0, t0, t1); x0:=x0 + t0*deltax; y0:=y0 + t0*deltay; z0:=z0 + t0*deltaz; x1:=x0 + t1*deltax; y1:=y0 + t1*deltay; z1:=z0 + t1*deltaz; showline (x0, y0, z0, x1, y1, z1);1:end clip的主體部分程序Computer Graphics窗口到視口(視區(qū))的變換 窗口到視口(視區(qū))的變換是指把所定義的視見體中的內(nèi)容對應(yīng)到二維的屏幕之中。相當于將相機拍攝的底片洗印到
23、不同尺寸的相片上。 通常視見體的寬高比和視口的寬高比應(yīng)該相同,這樣當視見體中的圖形映射到視口時物體才不會發(fā)生變形。 Computer Graphics 6.4 窗口到視口的變換 視口(區(qū))是在屏幕或繪圖紙上指定的一個矩形,在 坐標系中的頂點的坐標分別是(VL,VB)和 (VR,VT) 。窗口由點(WL,WB)和(WR,WT)決定。窗口中的圖形應(yīng)該成比例地變到視口。窗口中的任一點 和 視口中的對應(yīng)點(xv, yv)應(yīng)滿足下列關(guān)系是vvvyxo整理得圖6.20 窗口至視口的變換wRwLwBwTvLvRvBvTxvOvyvywOwxw(,)ppxypLvLRLRLxwxvvvwwpBvBTBTByw
24、yvvvwwvpvpxAxByCyD其中(6.15) LRLRwwvvALLwAvBBTBTwwvvCBBwCvDComputer Graphics6.4 窗口到視口的變換vvqvvvqvqyyqxx ,齊次坐標形式為 其中qyxDCBAqyxqqvvqvq10000(6.16) qpxx qqpyy q在OpenGL中可以用如下函數(shù)定義視口: void glViewport (GLint x, GLint y, GLsizei width, GLsizei height);其中:x、y為視口矩形的左下角(像素為單位)坐標;width、height分別為視口的寬和高。默認情況下,初始視口的值為
25、(0,0,winWidth,winHeight),其中winWidth、winHeight為窗口的寬和高。應(yīng)該使視口區(qū)的長寬比與取景體的長寬比相等,否則會使顯示的圖象變形 vpvpxAxByCyDComputer Graphics窗口、視口變換窗口、視口變換v 修改視口: :glViewport()是OpenGL提供的修改視口的函數(shù)。v 將glViewport(0, 0, width, height)改為glViewport(0, 0, width/2, height/2),再執(zhí)行程序,可以看到圖形變小了一半。這是因為glViewport()指定了一個更小的顯示區(qū)域(視口)。v 修改窗口(視見
26、體):將gluOrtho2D(0, width, 0, height) 改為gluOrtho2D(0, 2*width, 0, 2*height),再執(zhí)行程序,可以看到圖形同樣減小了一半。雖然視區(qū)未變,但由于窗口(視見體)變大了,圖形也就顯得小了。 Computer Graphics 投影平面上窗口的定義可以有兩種方法。一種是OpenGL中采用的用glFrustum()、glPerspective()和glOrtho()定義四棱臺或四棱柱的視見體,他們在投影平面上的投影自然形成了窗口。 這種方法雖然直觀,但難以保證所觀察的圖形在窗口內(nèi),另一種自動定義窗口的方法。 窗口的定義Computer G
27、raphics 自動定義窗口 在對象的中心位置附近給定一點(xc, yc, zc)和一個常數(shù)r,要求以該點為球心,r為半徑的球能把對象包含在內(nèi)。定義立方體設(shè)點(xc, yc, zc)的投影為 ,令八個點投影到投影平面,設(shè)其投影點的坐標分別為 以 為左下角點, 為右上角定義的窗口,常常不和預(yù)先由參數(shù)VL,VB,VR,VT定義的視口視口相似,須作調(diào)整,保證所觀察的圖形在窗口內(nèi),) , ,(rzryrxccc8 , , 2 , 1 ), ,(iyxii) ,(ccyxmax ()max ()micmicxxxyyy) ,(mcmcyyxx) ,(mcmcyyxx: ()/() / / TBRLmmm
28、mmmmmAVVVVif yAxthen xyAelse if yA xthen yxAComputer Graphics 6.5 連續(xù)變換的處理 (6.17) (,1)( , , ,1)TTx y zx y zT T1其中T1是一個44的矩陣。設(shè)投影變換是2(, )( ,1)TTqqxy qx y zT T(6.18)其中T2是34矩陣,窗口至視區(qū)的變換是3(,)(, )TTvqvqvqqxyqxy qT T設(shè)在世界坐標系中的變換合并成一個矩陣T T1,變換為(6.19) 其中T3是33矩陣。為了適合不同物理設(shè)備尺度的要求,在x和y方向還要分別乘以一常數(shù),可由33的變換矩陣T4來實現(xiàn),即4(
29、,)(,)TTsqsqsvqvqvxyqxyqT T把變換(6.17)式至(6.20)式合并起來得4 3 2 1(,)( , , ,1)( , , ,1)TTTsqsqsxyqx y zx y zT TT TTT TT TT其中T=T4T3T2T1是一個34矩陣。(6.21) (6.20) Computer Graphics 屏幕坐標的計算 在對圖形變換以前,先要算出T,輸出每一個圖形元素時,只要作一次矩陣向量乘法(6.21)式,然后求得屏幕坐標中點的坐標 如果不要作投影變換,例如顯示對象本身是二維的,或是平行投影,那么式(6.22)也可不作投影變換,這時可直接令(6.22) ssqsssqs
30、qyyqxx,ssqssqxxyy(6.21) TTTssqsqzyxzyxqyx) 1 ,() 1 ,(),(1234TTTTTComputer Graphics 提高效率的技術(shù)圖6.21 圖形的顯示流程對窗口剪 裁窗口至視口的變換顯示或繪 圖世界坐標系的三維變換投影從圖6.21來看,在投影變換之后,窗口到視區(qū)變換之前還要對窗口作裁剪,裁剪工作無法用矩陣來表示,不能把裁剪工作合并到T中去。為減少工作量,可把幾個矩陣合并起來GKS3D 圖形顯示流程Computer Graphics提高效率的技術(shù) 對三維窗口,窗口在深度方面有兩個平行于投影面的平面作為裁剪的邊界,這時可把深度裁剪放在最前面做,最
31、后作二維裁剪。簡單的圖形處理流程 T=T4T3T2T1Computer Graphics 6.6.1 OpenGL中的圖形變換 v 模型變換 構(gòu)造一個復(fù)雜的場景需要許多物體,這些物體都定義于其模型坐標系中,由于模型坐標系是依物體而建立的,物體在其中的表示相對簡單。一個物體或者獨立地出現(xiàn)在世界坐標系中,或者是更復(fù)雜物體的組成部分,無論哪種情況,都需要一個幾何變換將其變換到新的坐標系中,這個變換稱模型變換。 if (c_mode=1) glTranslatef(2,0,-2); /平移 if (c_mode=2) glScalef(0.5,0.6,1.2); /放縮 if (c_mode=3) g
32、lRotatef(30,0,1,0); /旋轉(zhuǎn) v 觀察變換 在實際生活中,為了在不同的距離和角度上拍攝物體,我們可以移動物體,進行模型變換,也可以保持物體不動而移動照相機,這個變換就稱為觀察變換。 gluLookAt(0,0,12,0,0,0,0,1,0); /設(shè)定觀察點的位置 Computer Graphics gluLookAtv它共接受三組坐標,分別為eye,center,upeye表示我們眼睛在“世界坐標系”中的位置,center表示眼睛“看”的那個物體中心點的坐標,up表示觀察者本身的方向,如果將觀察點比喻成我們的眼睛,那么這個up則表示我們是正立還是倒立異或某一個角度在看,所看的
33、影像大不相同,故此時需要指明我們現(xiàn)在正立,那么X,Z軸為0,Y軸為正即可,通常將其設(shè)置為1,只要表示一個向上的向量(方向)即可Computer Graphics OpenGL中的圖形變換v投影變換 投影變換定義了一個視見體,即限定場景在屏幕上顯示的范圍。 glFrustum(-0.5,1,-0.5,1,1,20); /定義透視投影矩陣 glOrtho(-7,7,-7,7,2,12); /定義正交投影矩陣 Computer Graphicsv視口變換 視口變換是指把所定義的視見體中的內(nèi)容對應(yīng)到二維的屏幕之中。相當于將相機拍攝的照片洗印到不同尺寸的相片上。 通常視見體的寬高比和視口的寬高比應(yīng)該相同
34、,這樣當視見體中的圖形映射到視口時物體才不會發(fā)生變形。 glViewport(0,0,cx,cy); /定義視口大小, cy為窗口的高度 Computer Graphics 6.6.2 OpenGL中的圖形變換應(yīng)用舉例 例例1 以一立方體為例,投影模式采用透視,視點固定,對其作平移、放縮和旋轉(zhuǎn)等模型變換,結(jié)果如圖6.226.26所示。 圖 6.22 原點在初始位置(1,1,1)圖 6.23 平移圖6.24 放縮圖6.25 繞y軸旋轉(zhuǎn)圖6.26 變換代替平移Computer Graphics 程序主要代碼如下void CExam2View:OnDraw(CDC* pDC) CExam2Doc*
35、pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data hereglClearColor(1,1,1,1); /用白色清屏glClear(GL_COLOR_BUFFER_BIT);glLoadIdentity(); /變換矩陣初始化gluLookAt(0,0,12,0,0,0,0,1,0); /設(shè)視點, (0,0,0)為參考點坐標, /gluLookAt(-2,0,14,-2,0,0,0,1,0); /觀察變換替代平移變換的視點draw_coord();glPushMatrix(); /把當前變
36、換矩陣壓入堆棧glTranslatef(1,1,1); /模型坐標系原點變換到世界坐標系的(1,1,1)位置/在模型坐標系中做變換Computer Graphics if (c_mode=1)glTranslatef(2,0,-2);/平移 if (c_mode=2)glScalef(0.5,0.6,1.2);/縮放 if (c_mode=3)glRotatef(30,0,1,0);/旋轉(zhuǎn) /下面這一函數(shù)可以得到當前的模型變換矩陣 /glGetDoublev(GL_MODELVIEW_MATRIX,array); draw_cuboid(4,4,4); glPopMatrix(); /從堆棧中
37、恢復(fù)變換前的變換矩陣void CExam2View:OnSize(UINT nType, int cx, int cy)/窗口變化時執(zhí)行該程序 CView:OnSize(nType, cx, cy); /窗口大小改變時的事件處理程序 / TODO: Add your message handler code here glMatrixMode(GL_PROJECTION); /選擇當前矩陣為投影矩陣 glLoadIdentity(); glFrustum(-0.5,1,-0.5,1,1,20); /定義窗口 glMatrixMode(GL_MODELVIEW); /選擇當前矩陣為模型變換 gl
38、ShadeModel(GL_FLAT); / 設(shè)置明暗效果,GL-FLAT,一個面片的顏色一致, / GL-SMOOTH,面片的顏色由插值產(chǎn)生 glViewport(0,0,cx,cy); / 定義視口Computer Graphics繪制立方體void CExam2View:draw_cuboid(GLdouble a, GLdouble b, GLdouble c)/繪制立方體 glColor3f(0,0,0); glBegin(GL_LINE_LOOP);/后面 glVertex3f(0,0,0); glVertex3f(a,0,0); glVertex3f(a,b,0); glVert
39、ex3f(0,b,0); glEnd();glBegin(GL_LINE_LOOP);/前面 glVertex3f(0,0,c); glVertex3f(a,0,c); glVertex3f(a,b,c); glVertex3f(0,b,c);glEnd();glBegin(GL_LINES); /點按照線段連接glVertex3f(0,0,0);glVertex3f(0,0,c);glVertex3f(a,0,0);glVertex3f(a,0,c);glVertex3f(a,b,0);glVertex3f(a,b,c);glVertex3f(0,b,0); glVertex3f(0,b,c
40、);glEnd();Computer Graphics 繪制坐標系void CExam2View:draw_coord()/繪制坐標系glColor3f(1,0,0);glEnable(GL_LINE_STIPPLE);/線型設(shè)置glLineStipple(1,0 xF0F0);/虛線glBegin(GL_LINES); glVertex3f(0,0,0); glVertex3f(7,0,0); glVertex3f(0,0,0); glVertex3f(0,7,0); glVertex3f(0,0,0); glVertex3f(0,0,7); glEnd();glDisable(GL_LIN
41、E_STIPPLE);Computer Graphicsvoid CExam2View:OnRotate() / TODO: Add your command handler code herec_mode=3;Invalidate(); /激活OnDrawvoid CExam2View:OnTranslate() / TODO: Add your command handler code herec_mode=1;Invalidate();void CExam2View:OnScale() / TODO: Add your command handler code herec_mode=2;Invalidate();void CExam2View:OnInicube() / TODO: Add your command handler code herec_mode=0;Invalidate();Computer Graphics 如果保持物體不動,移動視點可以得到同樣的視覺效果。例如,對于平移變換glTranslatef(2,0,-2)的效果圖6.23,也可以通過觀察變換來實現(xiàn),只需把gluLookAt(0, 0, 12, 0, 0, 0, 0, 1, 0)改為
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 有機化學(xué)原料的廢棄物處理與資源化考核試卷
- 智能服務(wù)機器人技術(shù)創(chuàng)新考核試卷
- 機械式停車設(shè)備故障預(yù)防與診斷技巧考核試卷
- 木材采運的數(shù)字化轉(zhuǎn)型與智能化考核試卷
- 中介居間費合同范本
- 房主房子出租合同范本
- 維修農(nóng)村管道合同范本
- 畜牧產(chǎn)品加工與供應(yīng)合作協(xié)議
- 物聯(lián)網(wǎng)技術(shù)應(yīng)用研發(fā)生產(chǎn)合同書
- 電信運營商合作協(xié)議具體內(nèi)容
- 《中小學(xué)科學(xué)教育工作指南》解讀與培訓(xùn)
- 跨學(xué)科主題學(xué)習(xí)的意義與設(shè)計思路
- 2025年浙江國企臺州黃巖站場管理服務(wù)有限公司招聘筆試參考題庫附帶答案詳解
- 加快形成農(nóng)業(yè)新質(zhì)生產(chǎn)力
- 2025年中糧集團招聘筆試參考題庫含答案解析
- 湖北省七市2025屆高考數(shù)學(xué)一模試卷含解析
- 2024年四川省綿陽市中考語文試卷(附真題答案)
- 心電圖危急值的識別和處理知到智慧樹章節(jié)測試課后答案2024年秋浙江大學(xué)
- 低代碼應(yīng)用開發(fā) 課件全套 李春平 第1-9章 低代碼應(yīng)用開發(fā) - 低代碼開發(fā)應(yīng)用實例
- 2024年開學(xué)第一課:人工智能與未來教育
- 蟾蜍毒抗病毒活性位點
評論
0/150
提交評論