維變換及三維觀察.ppt
《維變換及三維觀察.ppt》由會員分享,可在線閱讀,更多相關(guān)《維變換及三維觀察.ppt(77頁珍藏版)》請在裝配圖網(wǎng)上搜索。
三維圖形變換包括三維圖形幾何變換和投影變換 三維圖形幾何變換是指對三維圖形的幾何信息經(jīng)過平移 比例 旋轉(zhuǎn)等變換后產(chǎn)生新的圖形 三維圖形幾何變換實現(xiàn)從不同位置觀察三維物體的模擬 投影變換就是將三維立體 或物體 投射到投影面上得到二維平面圖形 其實質(zhì)是用二維圖形表達三維對象 與二維幾何變換類似 三維圖形幾何變換也是通過對頂點坐標做矩陣變換來實現(xiàn) 在定義了規(guī)范化齊次坐標系之后 三維圖形變換可以表示為圖形點集的規(guī)范化齊次坐標矩陣與某一變化矩陣相乘的形式 三維變換的基本概念 三維齊次坐標變換矩陣簡稱為三維變換矩陣 其形式為 三維變換的基本概念 三維空間點的三維變換可以表示為點的規(guī)范化齊次坐標矩陣與三維變換矩陣相乘的形式 三維變換的基本概念 T3D按功能可劃分為4個子矩陣 3x3階子矩陣 作用是對點進行比例 對稱 旋轉(zhuǎn)和錯切變換 1x3階子矩陣 作用是對點進行平移變換 3x1階子矩陣 作用是對點進行透視變換 1x1階子矩陣 作用是產(chǎn)生整體比例變換 三維變換的基本概念 常見的幾種三維齊次坐標變換矩陣 一 比例變換 二 平移變換 矩陣中的aej分別為xyz三個方向的比例因子 矩陣中的lmn分別為xyz三個方向的平移量 三維幾何變換 三 旋轉(zhuǎn)變換 旋轉(zhuǎn)角度正負向定義符合右手螺旋定則 即大拇指表示坐標軸正向 四指握拳的方向為旋轉(zhuǎn)角的正向 三維幾何變換 常見的幾種三維齊次坐標變換矩陣 當物體分別繞x y z軸旋轉(zhuǎn)時 旋轉(zhuǎn)變換矩陣分別為 繞x軸旋轉(zhuǎn) 旋轉(zhuǎn)前后坐標變換的關(guān)系為 三維幾何變換 繞y軸旋轉(zhuǎn) 旋轉(zhuǎn)前后坐標變換的關(guān)系為 三維幾何變換 繞z軸旋轉(zhuǎn) 旋轉(zhuǎn)前后坐標變換的關(guān)系為 三維幾何變換 四 三維復(fù)合變換變換 三維復(fù)合變換是指圖形作一次以上的變換 變換結(jié)果是每次變換矩陣的乘積 三維幾何變換 三維齊次坐標變換矩陣 四 三維復(fù)合變換變換 繞任意軸的三維旋轉(zhuǎn)變換 假設(shè)已知空間有任意軸AB 點A的坐標為 xA yA zA AB矢量的方向系數(shù)為 a b c 現(xiàn)有空間點P x y z 繞AB軸逆時針方向旋轉(zhuǎn) 角后為P x y z 若旋轉(zhuǎn)變換矩陣為TrAB 則有 三維齊次坐標變換矩陣 變換步驟 平移 將點A平移至原點 旋轉(zhuǎn) 將平移后的軸OB 繞y軸旋轉(zhuǎn)a角 使OB 變換成位于zoy面內(nèi)的矢量B 旋轉(zhuǎn) 再繞x軸旋轉(zhuǎn)b角 使矢量與oz軸重合 點P旋轉(zhuǎn) 點P繞oz軸旋轉(zhuǎn)q角 逆變換 按上述步驟做逆變換 使AB回到原來位置 三維齊次坐標變換矩陣 四 三維復(fù)合變換變換 繞任意軸的三維旋轉(zhuǎn)變換 上述變換過程用矩陣表示為 要推導(dǎo)出7個矩陣相乘后的結(jié)果矩陣 是一項復(fù)雜且易出錯的工作 OpenGL通過操作矩陣堆棧完成多個矩陣相乘 平面幾何投影 計算機圖形顯示的核心是創(chuàng)建三維物體的二維圖像 因為計算機的屏幕是二維平面 投影即是三維物體通過投射 在投影面上生成二維平面圖形 投影分為平面幾何投影和觀察投影 平面幾何投影主要指平行投影和透視投影 觀察投影是指在觀察空間下進行的圖形投影變換 投影的過程實質(zhì)上是一種變換 在計算機內(nèi)部 不同的變換可以用不同的矩陣表示 平面幾何投影 平行投影 互相平行的投射線照射物體 在投影面內(nèi)產(chǎn)生三維物體的影像 平行投影體系生成物體的三視圖和軸測圖 透視投影 點光源發(fā)出的光線照射物體 在投影面上產(chǎn)生三維物體的影像 透視圖分為單點透視 兩點透視和三點透視 透視投影和平行投影的本質(zhì)區(qū)別在于透視投影的投影中心到投影面之間的距離是有限的 平行投影的投影中心到投影面之間的距離是無限的 透視投影屬于中心投影 正投影和斜投影屬于平行投影 平面幾何投影 平面幾何投影 三維投影變換 平行正投影三視圖 三視圖包括主視圖 俯視圖和左視圖 由三維形體經(jīng)投影變換得到 要繪制三視圖 需求得變換矩陣 經(jīng)投影變換得到三維形體上各頂點的投影坐標 即可繪制出三視圖 三維投影變換的實質(zhì)是將三維形體上各點投影到同一個平面上 得到的是一個二維的投影視圖 三維投影變換 平行正投影三視圖 主視圖投影矩陣為 三維投影變換 平行正投影三視圖 俯視圖 三維形體向xoy面 又稱H面 作垂直投影得到俯視圖 三維投影變換 平行正投影三視圖 俯視圖投影矩陣 立體向XOY面投影 三維投影變換 平行正投影三視圖 俯視圖投影矩陣 XOY面繞OX軸向下旋轉(zhuǎn)90度 三維投影變換 平行正投影三視圖 俯視圖投影矩陣 水平投影圖形向下移動 三維投影變換 平行正投影三視圖 俯視圖投影矩陣 三維投影變換 平行正投影三視圖 側(cè)視圖 獲得側(cè)視圖是將三維形體往yoz面 側(cè)面W 作垂直投影 三維投影變換 平行正投影三視圖 側(cè)視圖投影矩陣 立體向YOZ面投影 三維投影變換 平行正投影三視圖 側(cè)視圖投影矩陣 YOZ面繞OZ軸旋轉(zhuǎn) 三維投影變換 平行正投影三視圖 側(cè)視圖投影矩陣 側(cè)投影圖形沿水平方向平移 三維投影變換 平行正投影三視圖 側(cè)視圖投影矩陣 三維投影變換 平行正投影三視圖 最終得到立體的三視圖 三維投影變換 正軸測圖 正軸測圖簡介 選不平行于基本投影面的平面為投影面 以垂直于投影面的矢量為投影矢量 得到的三維形體的圖形 稱為正軸測圖 如右圖示 三維投影變換 正軸測圖 正軸測投影是以任意平面為投影面所做的投影 如圖 若以ABC為投影面 投影矢量OF垂直于ABC平面 點E為原點O在ABC上的投影 產(chǎn)生正軸測投影的思路為 將投影矢量OF通過兩次旋轉(zhuǎn)變化至與Z軸重合 此時ABC平面變化至與XOY面平行 三維向XOY面做投影即可 三維投影變換 正軸測圖 用矩陣表示正軸測變換的過程 矢量OF繞Y軸旋轉(zhuǎn)a角 三維投影變換 正軸測圖 用矩陣表示正軸測變換的過程 矢量OF繞X軸旋轉(zhuǎn) 角 三維投影變換 正軸測圖 用矩陣表示正軸測變換的過程 再將三維形體向XOY面投影 三維投影變換 正軸測圖 將上述三個變換矩陣相乘得到正軸測變換矩陣 三維投影變換 正等軸測圖 正等軸測投影是x y z三個方向的軸向伸縮系數(shù)相等的正軸測投影 此時有 OA OB OC 推導(dǎo)可得 三維投影變換 正等軸測圖 正等軸測投影變換矩陣可寫為 三維投影變換 透視投影 透視投影是中心投影 下圖為一點透視投影原理圖 XOY為投影面 點P為空間點 p 為點p在投影面上的投影 投影中心在Z軸上 且距投影面為d 透視投影的大小與距離d的大小成反比 三維投影變換 透視投影 透視投影分為一點透視 兩點透視和三點透視 通過調(diào)整變換矩陣中的p q r的取值 可以得到不同的透視圖和不同的透視效果 透視投影由變換矩陣中的透視因子實現(xiàn) OpenGL中的變換 OpenGL圖形軟件包是為三維應(yīng)用而設(shè)計的 包含了大量的有關(guān)三維變換的操作 OpenGL中常用的變換包括模型視圖變換 投影變換和視見區(qū) 視景體 變換 模型視圖變換用于確定場景的位置 實現(xiàn)用戶在任意位置 任意方向上進行觀察 通過設(shè)定觀察參考坐標系實現(xiàn)視圖變換 通過對模型進行平移 旋轉(zhuǎn) 縮放等 實現(xiàn)模型變換 投影變換定義了一個觀察空間 指定已完成的場景轉(zhuǎn)換成屏幕上顯示的最終圖像的過程 常用的投影包括平行投影和透視投影 OpenGL中的變換 矩陣堆棧 計算機圖形學(xué)中 所有的變換都是通過矩陣相乘來實現(xiàn)的 OpenGL中 對象的坐標變換也是通過矩陣來實現(xiàn)的 OpenGL中包含兩個重要的矩陣 模型視圖矩陣和投影矩陣 模型視圖矩陣用于物體的模型視圖變換 投影矩陣用于投影變換 通過使用函數(shù)glMatrixMode Glenummode 指定當前操作的矩陣對象的類型 OpenGL中的變換 矩陣堆棧 指定矩陣類型函數(shù)的參數(shù)mode有兩個值 GL MODELVIEW 表示對模型矩陣進行操作 GL PROJECTION 表示對投影矩陣進行操作 一旦設(shè)置了當前操作矩陣 它就將保持為當前的矩陣對象 直到再次調(diào)用函數(shù)glMatrixMode進行修改為止 默認情況下 系統(tǒng)處理的當前矩陣是模型視圖矩陣 OpenGL中的變換 矩陣堆棧 在構(gòu)造復(fù)雜模型時 常常需要通過多個變換調(diào)整各部分的大小 方位 或者模擬一個運動機構(gòu) 需要用不同的變換矩陣來實現(xiàn)各部分自己的運動規(guī)律 為了能保存多次變換的中間過程 以便在進行一些變換后能恢復(fù)到某些變換前的狀態(tài) OpenGL為模型視圖矩陣和投影矩陣各維護著一個矩陣堆棧 棧頂矩陣就是當前的模型視圖矩陣或投影矩陣 矩陣堆棧用于保存和恢復(fù)矩陣的狀態(tài) 主要用于具有層次結(jié)構(gòu)的模型繪制 以提高繪圖效率 層次模型的概念 在大多數(shù)的應(yīng)用中 都需要方便的創(chuàng)建和操作許多復(fù)雜的對象 通常 可以將這些復(fù)雜的對象分成一些相對獨立的子對象 然后描述這些對象組合成完整對象時需要的規(guī)則 據(jù)此可以方便地描述 創(chuàng)建和操作復(fù)雜對象 OpenGL中的變換 矩陣堆棧 右圖為AS3 0中的顯示對象的等級結(jié)構(gòu) 是一個典型的層次結(jié)構(gòu) 在AS中 是通過容器構(gòu)建顯示對象的層次結(jié)構(gòu)的 而在OpenGL中 則是通過矩陣堆棧實現(xiàn)層次結(jié)構(gòu)的模型繪制 OpenGL中的變換 矩陣堆棧 OpenGL中的變換 矩陣堆棧 OpenGL實現(xiàn)矩陣堆棧操作的函數(shù) voidglPushMatrix void voidglPopMatrix void 函數(shù)glPushMatrix將當前堆棧的棧頂矩陣復(fù)制一個 并將其壓入當前矩陣堆棧 該函數(shù)用來保存當前變換矩陣 函數(shù)glPopMatrix用于將當前矩陣堆棧的棧頂矩陣彈出 堆棧中的下一個矩陣變?yōu)闂m斁仃?即當前變換矩陣 該函數(shù)用來恢復(fù)當前變換矩陣原先的狀態(tài) OpenGL中的變換 模型視圖變換 模型視圖矩陣是一個4G4階矩陣 用于指定場景的視圖變換 如生產(chǎn)三視圖 軸測圖等 和幾何變換 模型的縮放 旋轉(zhuǎn) 平移等 在進行模型視圖矩陣操作之前 必須先調(diào)用函數(shù)glMatrixMode GL MODELVIEW 指定變換只能影響模型視圖矩陣 OpenGL中的變換 模型視圖變換 模型視圖變換的實現(xiàn)主要有兩種方法 一 直接定義矩陣 p221 利用函數(shù)voidglLoadMatrix fd constTYPE m 將m指定的矩陣置為當前矩陣堆棧的棧頂矩陣 其中 m是指向一個4x4矩陣的指針 注意 如果矩陣m作用的模型是OpenGL庫函數(shù)定義的模型 則m矩陣以列優(yōu)先順序保存變換矩陣的數(shù)據(jù) 即前面推導(dǎo)的變換矩陣要轉(zhuǎn)秩 如果模型以頂點數(shù)組定義 而頂點數(shù)組是按行存儲點坐標 則矩陣m以行優(yōu)先順序保存變換矩陣的數(shù)據(jù) OpenGL中的變換 模型視圖變換 設(shè)置自定義矩陣的步驟 glfloatm glMatrixMode GL MODELCIEW glLoadMatrixf m 實例分析 軸測圖 mysolid旋轉(zhuǎn) 注意 OpenGL坐標系的XOY平面是正立投影面 因此生成三視圖的矩陣與課本中的矩陣有所不同 OpenGL中的變換 模型視圖變換 OpenGL坐標系如圖所示 在該坐標下下 三視圖變換矩陣如下 1 主視圖 所有點的z坐標為0 變換矩陣為 OpenGL中的變換 模型視圖變換 2 俯視圖變換矩陣推導(dǎo)過程如下 1 向XOZ面投影 OpenGL中的變換 模型視圖變換 2 俯視圖變換矩陣推導(dǎo)過程如下 2 繞X軸旋轉(zhuǎn)90 OpenGL中的變換 模型視圖變換 2 俯視圖變換矩陣推導(dǎo)過程如下 3 沿Y軸移動 m OpenGL中的變換 模型視圖變換 2 俯視圖變換矩陣推導(dǎo)過程如下 4 三步復(fù)合變換后得到在OpenGL屏幕坐標系中俯視圖變換矩陣 OpenGL中的變換 模型視圖變換 3 右視圖變換矩陣推導(dǎo)過程如下 1 向YOZ面投影 OpenGL中的變換 模型視圖變換 3 右視圖變換矩陣推導(dǎo)過程如下 2 繞Y軸旋轉(zhuǎn) 90 OpenGL中的變換 模型視圖變換 3 右視圖變換矩陣推導(dǎo)過程如下 3 沿x軸移動 l OpenGL中的變換 模型視圖變換 3 右視圖變換矩陣推導(dǎo)過程如下 4 三步復(fù)合變換后得到在OpenGL屏幕坐標系中右視圖變換矩陣 OpenGL中的變換 模型視圖變換 二 利用高級矩陣函數(shù)在OpenGL中 還可以通過一些高級矩陣函數(shù)實現(xiàn)模型的平移 旋轉(zhuǎn)和縮放 高級矩陣包括 glTranslate gf TYPEx TYPEy TYPEz glRotate df TYPEangle TYPEx TYPEy TYPEz glScale df TYPEx TYPEy TYPEz glTranslate df x y z 把當前矩陣 如頂點坐標矩陣 與平移變換矩陣相乘 三個參數(shù)為x y z三個方向的平移量 如果參數(shù)值為浮點數(shù) 則函數(shù)名寫為glTranslatef 參數(shù)值為雙精度數(shù) 則函數(shù)名寫為glTranslated glRotate df angle x y z 把當前矩陣 如頂點坐標矩陣 與旋轉(zhuǎn)變換矩陣相乘 Angle參數(shù)表示旋轉(zhuǎn)角度 從原點到點 x y z 的有向連線為旋轉(zhuǎn)軸 逆時針方向為正角度方向 OpenGL中的變換 模型視圖變換 glScale fd x y z 把當前矩陣 如頂點坐標矩陣 與比例變換矩陣相乘 三個參數(shù)分別為x y z三個方向的比例因子 OpenGL中的變換 模型視圖變換 OpenGL中的變換 模型視圖變換 調(diào)用矩陣函數(shù)繪制模型視圖時 后調(diào)用的矩陣將成為新的當前模型視圖矩陣 并影響此后繪制的圖形 會造成變換效果的累積 如果不需要這樣的累積 可以調(diào)用重置矩陣函數(shù) glLoadIdentity void 該函數(shù)將單位矩陣設(shè)置為當前變換矩陣 一般在指定當前操作矩陣對象后 都要調(diào)用重置矩陣函數(shù) 將之前變換的影響消除 視圖變換主要用于確定觀察參考坐標系 即確定視點的位置和觀察方向 也可以通過函數(shù)gluLookAt調(diào)整視點位置 以達到觀察立體不同側(cè)面的效果 gluLookAt xe ye ze xo yo zo xu yu zu 該函數(shù)有3組共9個參數(shù) 第一組3個參數(shù) 指定視點 相機鏡頭 在x y z三個方向的坐標 第二組3個參數(shù)指定視點 鏡頭 瞄準的點坐標 第三組3個參數(shù) 指定朝上的向量 注意 朝上矢量不能與視線矢量重疊 OpenGL中的變換 模型視圖變換 OpenGL中的變換 投影變換 OpenGL提供了兩種投影方式 一種是正投影 一種是透視投影 通過調(diào)用不同的函數(shù)實現(xiàn)不同的投影變換 為避免不必要的變換發(fā)生 必須調(diào)用glMatrixMode GL PROJECTION 指定當前處理的矩陣是投影變換矩陣 例如 glMatrixMode GL PROJECTION glLoadIdentity glOrtho 3 0 3 0 3 0 3 0 10 0 10 0 OpenGL中的變換 投影變換 一 正投影變換正投影變換由函數(shù)glOrtho 實現(xiàn) 該函數(shù)創(chuàng)建一個正交平行的視景體 在該視景體中產(chǎn)生三維物體的平行投影 如果沒有其它變換 比如旋轉(zhuǎn)等 投影方向為z軸負方向 glOrtho 函數(shù)創(chuàng)建了一個有限的觀察空間 空間的六個邊界面為裁剪面 軸測圖 例程修改視景體裁剪面觀察裁剪效果 OpenGL中的變換 投影變換 二 透視投影變換透視投影的特點是物體的視圖有近大遠小的效果 OpenGL透視投影函數(shù)有兩個 1 glFrustum 該函數(shù)指定的透視視景體如圖為所示 glFrustum left right bottom top near far 函數(shù)的六個參數(shù)分別定義了該視景體的left right bottom top near及far的數(shù)值 視點位于坐標系原點 2 gluPerspective gluPerspective 函數(shù)指定投影變換方式為透視變換 通過不同的參數(shù)定義透視視景體 下圖為gluPerspective 函數(shù)指定的透視視景體 視點位于坐標原點 OpenGL中的變換 投影變換 gluPerspective 有4個參數(shù) gluPerspective fovy aspect near far fovy 為yoz平面上的視角 取值范圍為 0 0 180 0 aspect 為視景體的縱橫比 near和far 分別是觀察點與視景體的前后裁剪面的距離 OpenGL中的變換 投影變換 投影變換 OpenGL的三維坐標變換 例 太陽系 變換矩陣堆棧實現(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的三維坐標變換 例 太陽系 投影變換 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 觀察 視點位置不變時 平行投影和透視投影的視覺效果的不同 在兩種投影方式時修改gluLookAt函數(shù)視點坐標的效果 投影變換 OpenGL的三維坐標變換 例 機械臂機械臂由兩部分 上 下臂 組成 希望實現(xiàn)上下臂的共同旋轉(zhuǎn)和下臂的獨立旋轉(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 將模型移遠5個單位 因為OpenGL庫函數(shù)定義的模型中心點都在原點 透視投影變換視點也在原點處 不調(diào)整原點位置無法觀察模型 投影變換 OpenGL的三維坐標變換 2 繪制上 下臂調(diào)用glutWireCube 1 0 函數(shù)繪制的立方體 通過glScalef函數(shù)改變長寬高的比例 glPushMatrix glScalef 2 0 0 4 1 0 glutWireCube 1 0 glPopMatrix 比例變換只作于改變形體的長寬比 不能影響其它運動 因此需要glPushMatrix 和glPopMatrix 函數(shù)來限制變換矩陣的影響范圍 下臂繪制也如此 投影變換 OpenGL的三維坐標變換 3 調(diào)整上臂旋轉(zhuǎn)中心glTranslatef 1 0 0 0 0 0 將旋轉(zhuǎn)中心沿x軸方向移 1glRotatef GLfloat shoulder 0 0 0 0 1 0 實現(xiàn)以點 1 0 0 為基點的繞z軸的旋轉(zhuǎn)glTranslatef 1 0 0 0 0 0 消除前一個平移變換對立體位置的影響 即長方體的中心仍保持在原點 投影變換 OpenGL的三維坐標變換 3 調(diào)整下臂旋轉(zhuǎn)中心glTranslatef 1 0 0 0 0 0 將立體沿x軸方向平移1glRotatef GLfloat elbow 0 0 0 0 1 0 實現(xiàn)以點 1 0 0 為基點的繞z軸的旋轉(zhuǎn)glTranslatef 1 0 0 0 0 0 將立體再沿x軸方向平移1注意 調(diào)整上臂旋轉(zhuǎn)中心的所有變換矩陣與調(diào)整下臂旋轉(zhuǎn)中心的所有變換矩陣在同一對glPushMatrix 和glPopMatrix 函數(shù)內(nèi) 因此角度為GLfloat shoulder的旋轉(zhuǎn)也作用于下臂 實現(xiàn)按下s鍵時上下臂一起旋轉(zhuǎn)- 1.請仔細閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 變換 三維 觀察
鏈接地址:http://m.kudomayuko.com/p-7511694.html