維變換及三維觀察.ppt
《維變換及三維觀察.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《維變換及三維觀察.ppt(77頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
三維圖形變換包括三維圖形幾何變換和投影變換 三維圖形幾何變換是指對(duì)三維圖形的幾何信息經(jīng)過(guò)平移 比例 旋轉(zhuǎn)等變換后產(chǎn)生新的圖形 三維圖形幾何變換實(shí)現(xiàn)從不同位置觀察三維物體的模擬 投影變換就是將三維立體 或物體 投射到投影面上得到二維平面圖形 其實(shí)質(zhì)是用二維圖形表達(dá)三維對(duì)象 與二維幾何變換類(lèi)似 三維圖形幾何變換也是通過(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ī)范化齊次坐標(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)變換矩陣 一 比例變換 二 平移變換 矩陣中的aej分別為xyz三個(gè)方向的比例因子 矩陣中的lmn分別為xyz三個(gè)方向的平移量 三維幾何變換 三 旋轉(zhuǎn)變換 旋轉(zhuǎn)角度正負(fù)向定義符合右手螺旋定則 即大拇指表示坐標(biāo)軸正向 四指握拳的方向?yàn)樾D(zhuǎn)角的正向 三維幾何變換 常見(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 現(xiàn)有空間點(diǎn)P x y z 繞AB軸逆時(shí)針?lè)较蛐D(zhuǎn) 角后為P x y z 若旋轉(zhuǎn)變換矩陣為T(mén)rAB 則有 三維齊次坐標(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ī)的屏幕是二維平面 投影即是三維物體通過(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ū)別在于透視投影的投影中心到投影面之間的距離是有限的 平行投影的投影中心到投影面之間的距離是無(wú)限的 透視投影屬于中心投影 正投影和斜投影屬于平行投影 平面幾何投影 平面幾何投影 三維投影變換 平行正投影三視圖 三視圖包括主視圖 俯視圖和左視圖 由三維形體經(jīng)投影變換得到 要繪制三視圖 需求得變換矩陣 經(jīng)投影變換得到三維形體上各頂點(diǎn)的投影坐標(biāo) 即可繪制出三視圖 三維投影變換的實(shí)質(zhì)是將三維形體上各點(diǎn)投影到同一個(gè)平面上 得到的是一個(gè)二維的投影視圖 三維投影變換 平行正投影三視圖 主視圖投影矩陣為 三維投影變換 平行正投影三視圖 俯視圖 三維形體向xoy面 又稱H面 作垂直投影得到俯視圖 三維投影變換 平行正投影三視圖 俯視圖投影矩陣 立體向XOY面投影 三維投影變換 平行正投影三視圖 俯視圖投影矩陣 XOY面繞OX軸向下旋轉(zhuǎn)90度 三維投影變換 平行正投影三視圖 俯視圖投影矩陣 水平投影圖形向下移動(dòng) 三維投影變換 平行正投影三視圖 俯視圖投影矩陣 三維投影變換 平行正投影三視圖 側(cè)視圖 獲得側(cè)視圖是將三維形體往yoz面 側(cè)面W 作垂直投影 三維投影變換 平行正投影三視圖 側(cè)視圖投影矩陣 立體向YOZ面投影 三維投影變換 平行正投影三視圖 側(cè)視圖投影矩陣 YOZ面繞OZ軸旋轉(zhuǎn) 三維投影變換 平行正投影三視圖 側(cè)視圖投影矩陣 側(cè)投影圖形沿水平方向平移 三維投影變換 平行正投影三視圖 側(cè)視圖投影矩陣 三維投影變換 平行正投影三視圖 最終得到立體的三視圖 三維投影變換 正軸測(cè)圖 正軸測(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è)圖 用矩陣表示正軸測(cè)變換的過(guò)程 再將三維形體向XOY面投影 三維投影變換 正軸測(cè)圖 將上述三個(gè)變換矩陣相乘得到正軸測(cè)變換矩陣 三維投影變換 正等軸測(cè)圖 正等軸測(cè)投影是x y z三個(gè)方向的軸向伸縮系數(shù)相等的正軸測(cè)投影 此時(shí)有 OA OB OC 推導(dǎo)可得 三維投影變換 正等軸測(cè)圖 正等軸測(cè)投影變換矩陣可寫(xiě)為 三維投影變換 透視投影 透視投影是中心投影 下圖為一點(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的取值 可以得到不同的透視圖和不同的透視效果 透視投影由變換矩陣中的透視因子實(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)的 OpenGL中 對(duì)象的坐標(biāo)變換也是通過(guò)矩陣來(lái)實(shí)現(xiàn)的 OpenGL中包含兩個(gè)重要的矩陣 模型視圖矩陣和投影矩陣 模型視圖矩陣用于物體的模型視圖變換 投影矩陣用于投影變換 通過(guò)使用函數(shù)glMatrixMode Glenummode 指定當(dāng)前操作的矩陣對(duì)象的類(lèi)型 OpenGL中的變換 矩陣堆棧 指定矩陣類(lèi)型函數(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)前矩陣是模型視圖矩陣 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ī)則 據(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ù) voidglPushMatrix void voidglPopMatrix void 函數(shù)glPushMatrix將當(dāng)前堆棧的棧頂矩陣復(fù)制一個(gè) 并將其壓入當(dāng)前矩陣堆棧 該函數(shù)用來(lái)保存當(dāng)前變換矩陣 函數(shù)glPopMatrix用于將當(dāng)前矩陣堆棧的棧頂矩陣彈出 堆棧中的下一個(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ù)voidglLoadMatrix fd constTYPE m 將m指定的矩陣置為當(dāng)前矩陣堆棧的棧頂矩陣 其中 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è)置自定義矩陣的步驟 glfloatm glMatrixMode GL MODELCIEW glLoadMatrixf m 實(shí)例分析 軸測(cè)圖 mysolid旋轉(zhuǎn) 注意 OpenGL坐標(biāo)系的XOY平面是正立投影面 因此生成三視圖的矩陣與課本中的矩陣有所不同 OpenGL中的變換 模型視圖變換 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 右視圖變換矩陣推導(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í)矩陣包括 glTranslate gf TYPEx TYPEy TYPEz glRotate df TYPEangle TYPEx TYPEy TYPEz glScale df TYPEx TYPEy TYPEz glTranslate df x y z 把當(dāng)前矩陣 如頂點(diǎn)坐標(biāo)矩陣 與平移變換矩陣相乘 三個(gè)參數(shù)為x y z三個(gè)方向的平移量 如果參數(shù)值為浮點(diǎn)數(shù) 則函數(shù)名寫(xiě)為glTranslatef 參數(shù)值為雙精度數(shù) 則函數(shù)名寫(xiě)為glTranslated glRotate df angle x y z 把當(dāng)前矩陣 如頂點(diǎn)坐標(biāo)矩陣 與旋轉(zhuǎn)變換矩陣相乘 Angle參數(shù)表示旋轉(zhuǎn)角度 從原點(diǎn)到點(diǎn) x y z 的有向連線為旋轉(zhuǎn)軸 逆時(shí)針?lè)较驗(yàn)檎嵌确较?OpenGL中的變換 模型視圖變換 glScale fd 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ù) 將之前變換的影響消除 視圖變換主要用于確定觀察參考坐標(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)不同的投影變換 為避免不必要的變換發(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è)邊界面為裁剪面 軸測(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ù)定義透視視景體 下圖為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 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 drawsun 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 drawearth glPopMatrix 投影變換 OpenGL的三維坐標(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ú)立旋轉(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)變換 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軸方向移 1glRotatef 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軸方向平移1glRotatef 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.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 變換 三維 觀察
鏈接地址:http://m.zhongcaozhi.com.cn/p-7511694.html