維變換及三維觀察.ppt
《維變換及三維觀察.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《維變換及三維觀察.ppt(77頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、三維圖形變換包括三維圖形幾何變換和投影變換。 三維圖形幾何變換是指對(duì)三維圖形的幾何信息經(jīng)過(guò)平移、比例、旋轉(zhuǎn)等變換后產(chǎn)生新的圖形。三維圖形幾何變換實(shí)現(xiàn)從不同位置觀察三維物體的模擬。 投影變換就是將三維立體(或物體)投射到投影面上得到二維平面圖形。其實(shí)質(zhì)是用二維圖形表達(dá)三維對(duì)象。,與二維幾何變換類似,三維圖形幾何變換也是通過(guò)對(duì)頂點(diǎn)坐標(biāo)做矩陣變換來(lái)實(shí)現(xiàn)。 在定義了規(guī)范化齊次坐標(biāo)系之后,三維圖形變換可以表示為圖形點(diǎn)集的規(guī)范化齊次坐標(biāo)矩陣與某一變化矩陣相乘的形式。,三維變換的基本概念,,三維齊次坐標(biāo)變換矩陣簡(jiǎn)稱為三維變換矩陣。 其形式為:,三維變換的基本概念,三維空間點(diǎn)的三維變換可以表示為點(diǎn)的規(guī)范化齊次
2、坐標(biāo)矩陣與三維變換矩陣相乘的形式。,三維變換的基本概念,T3D按功能可劃分為4個(gè)子矩陣。,3x3階子矩陣,作用是對(duì)點(diǎn)進(jìn)行比例、對(duì)稱、旋轉(zhuǎn)和錯(cuò)切變換。,1x3階子矩陣,作用是對(duì)點(diǎn)進(jìn)行平移變換。,3x1階子矩陣,作用是對(duì)點(diǎn)進(jìn)行透視變換。,1x1階子矩陣,作用是產(chǎn)生整體比例變換。,三維變換的基本概念,常見(jiàn)的幾種三維齊次坐標(biāo)變換矩陣:,一、比例變換:,二、平移變換:,矩陣中的a e j分別為x y z三個(gè)方向的比例因子。,矩陣中的l m n分別為x y z三個(gè)方向的平移量。,三維幾何變換,三、旋轉(zhuǎn)變換:,旋轉(zhuǎn)角度正負(fù)向定義符合右手螺旋定則。即大拇指表示坐標(biāo)軸正向,四指握拳的方向?yàn)樾D(zhuǎn)角的正向。,三維幾
3、何變換,常見(jiàn)的幾種三維齊次坐標(biāo)變換矩陣:,當(dāng)物體分別繞x、y、 z軸旋轉(zhuǎn)時(shí),旋轉(zhuǎn)變換矩陣分別為:,繞x軸旋轉(zhuǎn),旋轉(zhuǎn)前后坐標(biāo)變換的關(guān)系為:,,三維幾何變換,繞y軸旋轉(zhuǎn),旋轉(zhuǎn)前后坐標(biāo)變換的關(guān)系為:,,三維幾何變換,繞z軸旋轉(zhuǎn),旋轉(zhuǎn)前后坐標(biāo)變換的關(guān)系為:,,三維幾何變換,四、三維復(fù)合變換變換:,三維復(fù)合變換是指圖形作一次以上的變換,變換結(jié)果是每次變換矩陣的乘積。,三維幾何變換,三維齊次坐標(biāo)變換矩陣,四、三維復(fù)合變換變換繞任意軸的三維旋轉(zhuǎn)變換,假設(shè)已知空間有任意軸AB,點(diǎn)A的坐標(biāo)為(xA, yA, zA),AB矢量的方向系數(shù)為(a, b, c)?,F(xiàn)有空間點(diǎn)P(x, y, z),繞AB軸逆時(shí)針?lè)较蛐D(zhuǎn)角
4、后為P(x, y, z),若旋轉(zhuǎn)變換矩陣為TrAB,則有:,三維齊次坐標(biāo)變換矩陣,變換步驟: 平移將點(diǎn)A平移至原點(diǎn)。 旋轉(zhuǎn)將平移后的軸OB繞y軸旋轉(zhuǎn)a角,使OB變換成位于zoy面內(nèi)的矢量B”。 旋轉(zhuǎn)再繞x軸旋轉(zhuǎn)b角,使矢量與oz軸重合。 點(diǎn)P旋轉(zhuǎn)點(diǎn)P繞oz軸旋轉(zhuǎn)q角。 逆變換按上述步驟做逆變換,使AB回到原來(lái)位置。,三維齊次坐標(biāo)變換矩陣,四、三維復(fù)合變換變換繞任意軸的三維旋轉(zhuǎn)變換,上述變換過(guò)程用矩陣表示為:,要推導(dǎo)出7個(gè)矩陣相乘后的結(jié)果矩陣,是一項(xiàng)復(fù)雜且易出錯(cuò)的工作。OpenGL通過(guò)操作矩陣堆棧完成多個(gè)矩陣相乘。,平面幾何投影,計(jì)算機(jī)圖形顯示的核心是創(chuàng)建三維物體的二維圖像,因?yàn)橛?jì)算機(jī)的屏幕是二
5、維平面。 投影即是三維物體通過(guò)投射,在投影面上生成二維平面圖形。投影分為平面幾何投影和觀察投影。,平面幾何投影主要指平行投影和透視投影。 觀察投影是指在觀察空間下進(jìn)行的圖形投影變換。 投影的過(guò)程實(shí)質(zhì)上是一種變換,在計(jì)算機(jī)內(nèi)部,不同的變換可以用不同的矩陣表示。,平面幾何投影,平行投影:互相平行的投射線照射物體,在投影面內(nèi)產(chǎn)生三維物體的影像。平行投影體系生成物體的三視圖和軸測(cè)圖。,透視投影:點(diǎn)光源發(fā)出的光線照射物體,在投影面上產(chǎn)生三維物體的影像。 透視圖分為單點(diǎn)透視、兩點(diǎn)透視和三點(diǎn)透視。,透視投影和平行投影的本質(zhì)區(qū)別在于透視投影的投影中心到投影面之間的距離是有限的;平行投影的投影中心到投影面之間的
6、距離是無(wú)限的。,透視投影屬于中心投影,正投影和斜投影屬于平行投影,平面幾何投影,平面幾何投影,三維投影變換平行正投影三視圖,三視圖包括主視圖、俯視圖和左視圖,由三維形體經(jīng)投影變換得到。要繪制三視圖,需求得變換矩陣,經(jīng)投影變換得到三維形體上各頂點(diǎn)的投影坐標(biāo),即可繪制出三視圖。 三維投影變換的實(shí)質(zhì)是將三維形體上各點(diǎn)投影到同一個(gè)平面上,得到的是一個(gè)二維的投影視圖。,三維投影變換平行正投影三視圖,主視圖投影矩陣為:,三維投影變換平行正投影三視圖,俯視圖:三維形體向xoy面(又稱H面)作垂直投影得到俯視圖。,三維投影變換平行正投影三視圖,俯視圖投影矩陣:,立體向XOY面投影,三維投影變換平行正投影三視圖
7、,俯視圖投影矩陣:,XOY面繞OX軸向下旋轉(zhuǎn)90度,三維投影變換平行正投影三視圖,俯視圖投影矩陣:,水平投影圖形向下移動(dòng),三維投影變換平行正投影三視圖,俯視圖投影矩陣:,三維投影變換平行正投影三視圖,側(cè)視圖:獲得側(cè)視圖是將三維形體往yoz面(側(cè)面W)作垂直投影。,三維投影變換平行正投影三視圖,側(cè)視圖投影矩陣:,立體向YOZ面投影,三維投影變換平行正投影三視圖,側(cè)視圖投影矩陣:,YOZ面繞OZ軸旋轉(zhuǎn),三維投影變換平行正投影三視圖,側(cè)視圖投影矩陣:,側(cè)投影圖形沿水平方向平移,三維投影變換平行正投影三視圖,側(cè)視圖投影矩陣:,三維投影變換平行正投影三視圖,最終得到立體的三視圖,三維投影變換正軸測(cè)圖,正
8、軸測(cè)圖簡(jiǎn)介: 選不平行于基本投影面的平面為投影面,以垂直于投影面的矢量為投影矢量,得到的三維形體的圖形,稱為正軸測(cè)圖。如右圖示。,三維投影變換正軸測(cè)圖,正軸測(cè)投影是以任意平面為投影面所做的投影。如圖,若以ABC為投影面,投影矢量OF垂直于ABC平面,點(diǎn)E為原點(diǎn)O在ABC上的投影。產(chǎn)生正軸測(cè)投影的思路為:,將投影矢量OF通過(guò)兩次旋轉(zhuǎn)變化至與Z軸重合,此時(shí)ABC平面變化至與XOY面平行,三維向XOY面做投影即可。,三維投影變換正軸測(cè)圖,用矩陣表示正軸測(cè)變換的過(guò)程:,矢量OF繞Y軸旋轉(zhuǎn)a角,三維投影變換正軸測(cè)圖,用矩陣表示正軸測(cè)變換的過(guò)程:,矢量OF繞X軸旋轉(zhuǎn) 角,三維投影變換正軸測(cè)圖,用矩陣表示正
9、軸測(cè)變換的過(guò)程:,再將三維形體向XOY面投影,三維投影變換正軸測(cè)圖,將上述三個(gè)變換矩陣相乘得到正軸測(cè)變換矩陣:,三維投影變換正等軸測(cè)圖,正等軸測(cè)投影是x、y、z三個(gè)方向的軸向伸縮系數(shù)相等的正軸測(cè)投影,此時(shí)有:OA=OB=OC。 推導(dǎo)可得:,三維投影變換正等軸測(cè)圖,正等軸測(cè)投影變換矩陣可寫為:,三維投影變換 透視投影,透視投影是中心投影。下圖為一點(diǎn)透視投影原理圖,XOY為投影面,點(diǎn)P為空間點(diǎn),p為點(diǎn)p在投影面上的投影。投影中心在Z軸上,且距投影面為d。透視投影的大小與距離d的大小成反比。,三維投影變換 透視投影,透視投影分為一點(diǎn)透視、兩點(diǎn)透視和三點(diǎn)透視,通過(guò)調(diào)整變換矩陣中的p、q、r的取值,可以
10、得到不同的透視圖和不同的透視效果。,透視投影由變換矩陣中的透視因子實(shí)現(xiàn)。,OpenGL中的變換,OpenGL圖形軟件包是為三維應(yīng)用而設(shè)計(jì)的,包含了大量的有關(guān)三維變換的操作。OpenGL中常用的變換包括模型視圖變換、投影變換和視見(jiàn)區(qū)(視景體)變換。 模型視圖變換用于確定場(chǎng)景的位置,實(shí)現(xiàn)用戶在任意位置、任意方向上進(jìn)行觀察。通過(guò)設(shè)定觀察參考坐標(biāo)系實(shí)現(xiàn)視圖變換;通過(guò)對(duì)模型進(jìn)行平移、旋轉(zhuǎn)、縮放等,實(shí)現(xiàn)模型變換。 投影變換定義了一個(gè)觀察空間,指定已完成的場(chǎng)景轉(zhuǎn)換成屏幕上顯示的最終圖像的過(guò)程。常用的投影包括平行投影和透視投影。,OpenGL中的變換矩陣堆棧,計(jì)算機(jī)圖形學(xué)中,所有的變換都是通過(guò)矩陣相乘來(lái)實(shí)現(xiàn)的
11、。OpenGL中,對(duì)象的坐標(biāo)變換也是通過(guò)矩陣來(lái)實(shí)現(xiàn)的。 OpenGL中包含兩個(gè)重要的矩陣:模型視圖矩陣和投影矩陣。模型視圖矩陣用于物體的模型視圖變換,投影矩陣用于投影變換。 通過(guò)使用函數(shù)glMatrixMode(Glenum mode);指定當(dāng)前操作的矩陣對(duì)象的類型。,OpenGL中的變換矩陣堆棧,指定矩陣類型函數(shù)的參數(shù)mode有兩個(gè)值: GL_MODELVIEW:表示對(duì)模型矩陣進(jìn)行操作; GL_PROJECTION:表示對(duì)投影矩陣進(jìn)行操作; 一旦設(shè)置了當(dāng)前操作矩陣,它就將保持為當(dāng)前的矩陣對(duì)象,直到再次調(diào)用函數(shù)glMatrixMode進(jìn)行修改為止。 默認(rèn)情況下,系統(tǒng)處理的當(dāng)前矩陣是模型視圖矩陣
12、。,OpenGL中的變換矩陣堆棧,在構(gòu)造復(fù)雜模型時(shí),常常需要通過(guò)多個(gè)變換調(diào)整各部分的大小、方位;或者模擬一個(gè)運(yùn)動(dòng)機(jī)構(gòu),需要用不同的變換矩陣來(lái)實(shí)現(xiàn)各部分自己的運(yùn)動(dòng)規(guī)律。 為了能保存多次變換的中間過(guò)程,以便在進(jìn)行一些變換后能恢復(fù)到某些變換前的狀態(tài),OpenGL為模型視圖矩陣和投影矩陣各維護(hù)著一個(gè)矩陣堆棧,棧頂矩陣就是當(dāng)前的模型視圖矩陣或投影矩陣。 矩陣堆棧用于保存和恢復(fù)矩陣的狀態(tài),主要用于具有層次結(jié)構(gòu)的模型繪制,以提高繪圖效率。,層次模型的概念: 在大多數(shù)的應(yīng)用中,都需要方便的創(chuàng)建和操作許多復(fù)雜的對(duì)象。通常,可以將這些復(fù)雜的對(duì)象分成一些相對(duì)獨(dú)立的子對(duì)象,然后描述這些對(duì)象組合成完整對(duì)象時(shí)需要的規(guī)則,
13、據(jù)此可以方便地描述、創(chuàng)建和操作復(fù)雜對(duì)象。,OpenGL中的變換矩陣堆棧,右圖為AS3.0中的顯示對(duì)象的等級(jí)結(jié)構(gòu),是一個(gè)典型的層次結(jié)構(gòu)。 在AS中,是通過(guò)容器構(gòu)建顯示對(duì)象的層次結(jié)構(gòu)的,而在OpenGL中,則是通過(guò)矩陣堆棧實(shí)現(xiàn)層次結(jié)構(gòu)的模型繪制。,OpenGL中的變換矩陣堆棧,OpenGL中的變換矩陣堆棧,OpenGL實(shí)現(xiàn)矩陣堆棧操作的函數(shù): void glPushMatrix(void); void glPopMatrix(void); 函數(shù)glPushMatrix將當(dāng)前堆棧的棧頂矩陣復(fù)制一個(gè),并將其壓入當(dāng)前矩陣堆棧。該函數(shù)用來(lái)保存當(dāng)前變換矩陣。 函數(shù)glPopMatrix用于將當(dāng)前矩陣堆棧的棧
14、頂矩陣彈出,堆棧中的下一個(gè)矩陣變?yōu)闂m斁仃嚕串?dāng)前變換矩陣)。該函數(shù)用來(lái)恢復(fù)當(dāng)前變換矩陣原先的狀態(tài)。,OpenGL中的變換模型視圖變換,模型視圖矩陣是一個(gè)4G4階矩陣,用于指定場(chǎng)景的視圖變換(如生產(chǎn)三視圖、軸測(cè)圖等)和幾何變換(模型的縮放、旋轉(zhuǎn)、平移等)。 在進(jìn)行模型視圖矩陣操作之前,必須先調(diào)用函數(shù) glMatrixMode(GL_MODELVIEW); 指定變換只能影響模型視圖矩陣。,OpenGL中的變換模型視圖變換,模型視圖變換的實(shí)現(xiàn)主要有兩種方法。 一、直接定義矩陣(p221) 利用函數(shù) void glLoadMatrixfd(const TYPE *m); 將m指定的矩陣置為當(dāng)前矩陣堆
15、棧的棧頂矩陣。其中,m是指向一個(gè)4x4矩陣的指針。 注意:如果矩陣m作用的模型是OpenGL庫(kù)函數(shù)定義的模型,則m矩陣以列優(yōu)先順序保存變換矩陣的數(shù)據(jù);即前面推導(dǎo)的變換矩陣要轉(zhuǎn)秩。如果模型以頂點(diǎn)數(shù)組定義,而頂點(diǎn)數(shù)組是按行存儲(chǔ)點(diǎn)坐標(biāo),則矩陣m以行優(yōu)先順序保存變換矩陣的數(shù)據(jù)。,OpenGL中的變換模型視圖變換,設(shè)置自定義矩陣的步驟: glfloat m=; glMatrixMode(GL_MODELCIEW); glLoadMatrixf(m); 實(shí)例分析:軸測(cè)圖,mysolid旋轉(zhuǎn),注意:OpenGL坐標(biāo)系的XOY平面是正立投影面,因此生成三視圖的矩陣與課本中的矩陣有所不同。,OpenGL中的變換
16、模型視圖變換,OpenGL坐標(biāo)系如圖所示,在該坐標(biāo)下下,三視圖變換矩陣如下。,1. 主視圖,所有點(diǎn)的z坐標(biāo)為0,變換矩陣為:,OpenGL中的變換模型視圖變換,2. 俯視圖變換矩陣推導(dǎo)過(guò)程如下。 (1) 向XOZ面投影:,OpenGL中的變換模型視圖變換,2. 俯視圖變換矩陣推導(dǎo)過(guò)程如下。 (2)繞X軸旋轉(zhuǎn)90:,OpenGL中的變換模型視圖變換,2. 俯視圖變換矩陣推導(dǎo)過(guò)程如下。 (3) 沿Y軸移動(dòng)m:,OpenGL中的變換模型視圖變換,2. 俯視圖變換矩陣推導(dǎo)過(guò)程如下。 (4) 三步復(fù)合變換后得到在OpenGL屏幕坐標(biāo)系中俯視圖變換矩陣:,OpenGL中的變換模型視圖變換,3. 右視圖變換
17、矩陣推導(dǎo)過(guò)程如下。 (1) 向YOZ面投影:,OpenGL中的變換模型視圖變換,3. 右視圖變換矩陣推導(dǎo)過(guò)程如下。 (2) 繞Y軸旋轉(zhuǎn)-90:,OpenGL中的變換模型視圖變換,3. 右視圖變換矩陣推導(dǎo)過(guò)程如下。 (3)沿x軸移動(dòng)-l:,OpenGL中的變換模型視圖變換,3. 右視圖變換矩陣推導(dǎo)過(guò)程如下。 (4) 三步復(fù)合變換后得到在OpenGL屏幕坐標(biāo)系中右視圖變換矩陣:,OpenGL中的變換模型視圖變換,二、利用高級(jí)矩陣函數(shù) 在OpenGL中,還可以通過(guò)一些高級(jí)矩陣函數(shù)實(shí)現(xiàn)模型的平移、旋轉(zhuǎn)和縮放。高級(jí)矩陣包括: glTranslategf(TYPE x, TYPE y, TYPE z);
18、glRotate df(TYPE angle, TYPE x, TYPE y, TYPE z); glScale df(TYPE x, TYPE y, TYPE z);,glTranslatedf(x, y, z,): 把當(dāng)前矩陣(如頂點(diǎn)坐標(biāo)矩陣)與平移變換矩陣相乘。三個(gè)參數(shù)為x, y, z三個(gè)方向的平移量。如果參數(shù)值為浮點(diǎn)數(shù),則函數(shù)名寫為glTranslatef;參數(shù)值為雙精度數(shù),則函數(shù)名寫為glTranslated; glRotatedf(angle, x, y, z): 把當(dāng)前矩陣(如頂點(diǎn)坐標(biāo)矩陣)與旋轉(zhuǎn)變換矩陣相乘。Angle參數(shù)表示旋轉(zhuǎn)角度,從原點(diǎn)到點(diǎn)(x, y, z)的有向連線為旋
19、轉(zhuǎn)軸,逆時(shí)針?lè)较驗(yàn)檎嵌确较颉?OpenGL中的變換模型視圖變換,glScalefd(x, y, z,): 把當(dāng)前矩陣(如頂點(diǎn)坐標(biāo)矩陣)與比例變換矩陣相乘。三個(gè)參數(shù)分別為x, y, z三個(gè)方向的比例因子。,OpenGL中的變換模型視圖變換,OpenGL中的變換模型視圖變換,調(diào)用矩陣函數(shù)繪制模型視圖時(shí),后調(diào)用的矩陣將成為新的當(dāng)前模型視圖矩陣,并影響此后繪制的圖形,會(huì)造成變換效果的累積。如果不需要這樣的累積,可以調(diào)用重置矩陣函數(shù): glLoadIdentity(void); 該函數(shù)將單位矩陣設(shè)置為當(dāng)前變換矩陣。一般在指定當(dāng)前操作矩陣對(duì)象后,都要調(diào)用重置矩陣函數(shù),將之前變換的影響消除。,視圖變換主要
20、用于確定觀察參考坐標(biāo)系,即確定視點(diǎn)的位置和觀察方向。 也可以通過(guò)函數(shù)gluLookAt調(diào)整視點(diǎn)位置,以達(dá)到觀察立體不同側(cè)面的效果。 gluLookAt(xe, ye, ze, xo, yo, zo, xu, yu, zu) 該函數(shù)有3組共9個(gè)參數(shù),第一組3個(gè)參數(shù),指定視點(diǎn)(相機(jī)鏡頭)在x、y、z三個(gè)方向的坐標(biāo);第二組3個(gè)參數(shù)指定視點(diǎn)(鏡頭)瞄準(zhǔn)的點(diǎn)坐標(biāo);第三組3個(gè)參數(shù),指定朝上的向量。(注意:朝上矢量不能與視線矢量重疊),OpenGL中的變換模型視圖變換,OpenGL中的變換投影變換,OpenGL提供了兩種投影方式:一種是正投影,一種是透視投影。通過(guò)調(diào)用不同的函數(shù)實(shí)現(xiàn)不同的投影變換。 為避免不
21、必要的變換發(fā)生,必須調(diào)用 glMatrixMode(GL_PROJECTION) 指定當(dāng)前處理的矩陣是投影變換矩陣。 例如: glMatrixMode (GL_PROJECTION); glLoadIdentity(); glOrtho (-3.0, 3.0, -3.0, 3.0, -10.0, 10.0);,OpenGL中的變換投影變換,一、正投影變換 正投影變換由函數(shù)glOrtho()實(shí)現(xiàn)。該函數(shù)創(chuàng)建一個(gè)正交平行的視景體。在該視景體中產(chǎn)生三維物體的平行投影。如果沒(méi)有其它變換,比如旋轉(zhuǎn)等,投影方向?yàn)閦軸負(fù)方向。 glOrtho()函數(shù)創(chuàng)建了一個(gè)有限的觀察空間,空間的六個(gè)邊界面為裁剪面。,“軸
22、測(cè)圖”例程修改視景體裁剪面觀察裁剪效果。,OpenGL中的變換投影變換,二、透視投影變換 透視投影的特點(diǎn)是物體的視圖有近大遠(yuǎn)小的效果。OpenGL透視投影函數(shù)有兩個(gè): 1. glFrustum(): 該函數(shù)指定的透視視景體 如圖為所示。,glFrustum(left, right, bottom, top, near, far); 函數(shù)的六個(gè)參數(shù)分別定義了該視景體的left, right, bottom, top, near及 far的數(shù)值。 視點(diǎn)位于坐標(biāo)系原點(diǎn)。,2. gluPerspective(): gluPerspective()函數(shù)指定投影變換方式為透視變換,通過(guò)不同的參數(shù)定義透視視
23、景體。 下圖為gluPerspective()函數(shù)指定的透視視景體。 視點(diǎn)位于坐標(biāo)原點(diǎn)。,OpenGL中的變換投影變換,gluPerspective()有4個(gè)參數(shù): gluPerspective(fovy, aspect, near, far); fovy:為yoz平面上的視角,取值范圍為0.0, 180.0; aspect:為視景體的縱橫比; near和far:分別是觀察點(diǎn)與視景體的前后裁剪面的距離。,OpenGL中的變換投影變換,投影變換OpenGL的三維坐標(biāo)變換,例:太陽(yáng)系(變換矩陣堆棧實(shí)現(xiàn)模型變換),glMatrixMode(GL_MODELVIEW); glLoadIdentity(
24、); gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glPushMatrix(); glutWireSphere(1.0, 20, 20); /* draw sun */ glRotatef ((GLfloat) year, 0.0, 1.0, 0.0); glTranslatef (2.0, 0.0, 0.0); glRotatef ((GLfloat) day, 0.0, 1.0, 0.0); glutWireSphere(0.2, 10, 10); /* draw earth*/ glPopMatrix();,投影變換O
25、penGL的三維坐標(biāo)變換,例:太陽(yáng)系(投影變換),glMatrixMode (GL_PROJECTION); glLoadIdentity (); glOrtho (-3.0, 3.0, -3.0, 3.0, 1.0, 20.0); /*或者 gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0); 觀察:視點(diǎn)位置不變時(shí),平行投影和透視投影的視覺(jué)效果的不同。在兩種投影方式時(shí)修改gluLookAt函數(shù)視點(diǎn)坐標(biāo)的效果。,投影變換OpenGL的三維坐標(biāo)變換,例:機(jī)械臂 機(jī)械臂由兩部分(上、下臂)組成,希望實(shí)現(xiàn)上下臂的共同旋轉(zhuǎn)和下臂的獨(dú)立旋
26、轉(zhuǎn)。 1. 設(shè)定投影矩陣參數(shù)和調(diào)整物體的基本位置: glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluPerspective(65.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0);//設(shè)定投影矩陣 glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef (0.0, 0.0, -5.0); //將模型移遠(yuǎn)5個(gè)單位。因?yàn)镺penGL庫(kù)函數(shù)定義的模型中心點(diǎn)都在原點(diǎn),透視投影變換視點(diǎn)也在原點(diǎn)處,不調(diào)整原點(diǎn)位置無(wú)法觀察模型。,投影變換OpenGL的三維坐標(biāo)變換
27、,2. 繪制上、下臂 調(diào)用glutWireCube (1.0)函數(shù)繪制的立方體,通過(guò)glScalef函數(shù)改變長(zhǎng)寬高的比例。 glPushMatrix(); glScalef(2.0, 0.4, 1.0); glutWireCube (1.0); glPopMatrix(); 比例變換只作于改變形體的長(zhǎng)寬比,不能影響其它運(yùn)動(dòng),因此需要glPushMatrix();和glPopMatrix();函數(shù)來(lái)限制變換矩陣的影響范圍。 下臂繪制也如此。,投影變換OpenGL的三維坐標(biāo)變換,3. 調(diào)整上臂旋轉(zhuǎn)中心 glTranslatef (-1.0, 0.0, 0.0); //將旋轉(zhuǎn)中心沿x軸方向移-1 g
28、lRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0); //實(shí)現(xiàn)以點(diǎn)(-1,0,0)為基點(diǎn)的繞z軸的旋轉(zhuǎn) glTranslatef (1.0, 0.0, 0.0); //消除前一個(gè)平移變換對(duì)立體位置的影響, 即長(zhǎng)方體的中心仍保持在原點(diǎn)。,投影變換OpenGL的三維坐標(biāo)變換,3. 調(diào)整下臂旋轉(zhuǎn)中心 glTranslatef (1.0, 0.0, 0.0); //將立體沿x軸方向平移1 glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0); //實(shí)現(xiàn)以點(diǎn)(1,0,0)為基點(diǎn)的繞z軸的旋轉(zhuǎn) glTranslatef (1.0, 0.0, 0.0); //將立體再沿x軸方向平移1 注意:調(diào)整上臂旋轉(zhuǎn)中心的所有變換矩陣與調(diào)整下臂旋轉(zhuǎn)中心的所有變換矩陣在同一對(duì)glPushMatrix()和glPopMatrix()函數(shù)內(nèi),因此角度為GLfloat) shoulder的旋轉(zhuǎn)也作用于下臂,實(shí)現(xiàn)按下s鍵時(shí)上下臂一起旋轉(zhuǎn)。,
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)6整理和復(fù)習(xí)2圖形與幾何第7課時(shí)圖形的位置練習(xí)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)6整理和復(fù)習(xí)2圖形與幾何第1課時(shí)圖形的認(rèn)識(shí)與測(cè)量1平面圖形的認(rèn)識(shí)練習(xí)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)6整理和復(fù)習(xí)1數(shù)與代數(shù)第10課時(shí)比和比例2作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)4比例1比例的意義和基本性質(zhì)第3課時(shí)解比例練習(xí)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)3圓柱與圓錐1圓柱第7課時(shí)圓柱的體積3作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)3圓柱與圓錐1圓柱第1節(jié)圓柱的認(rèn)識(shí)作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)2百分?jǐn)?shù)(二)第1節(jié)折扣和成數(shù)作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)1負(fù)數(shù)第1課時(shí)負(fù)數(shù)的初步認(rèn)識(shí)作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)上冊(cè)期末復(fù)習(xí)考前模擬期末模擬訓(xùn)練二作業(yè)課件蘇教版
- 2023年六年級(jí)數(shù)學(xué)上冊(cè)期末豐收?qǐng)@作業(yè)課件蘇教版
- 2023年六年級(jí)數(shù)學(xué)上冊(cè)易錯(cuò)清單十二課件新人教版
- 標(biāo)準(zhǔn)工時(shí)講義
- 2021年一年級(jí)語(yǔ)文上冊(cè)第六單元知識(shí)要點(diǎn)習(xí)題課件新人教版
- 2022春一年級(jí)語(yǔ)文下冊(cè)課文5識(shí)字測(cè)評(píng)習(xí)題課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)6整理和復(fù)習(xí)4數(shù)學(xué)思考第1課時(shí)數(shù)學(xué)思考1練習(xí)課件新人教版