OpenGL圖形編程3二維觀察與三維變換課課件_第1頁
OpenGL圖形編程3二維觀察與三維變換課課件_第2頁
OpenGL圖形編程3二維觀察與三維變換課課件_第3頁
OpenGL圖形編程3二維觀察與三維變換課課件_第4頁
OpenGL圖形編程3二維觀察與三維變換課課件_第5頁
已閱讀5頁,還剩89頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

OpenGL圖形編程1ppt課件.OpenGL圖形編程1ppt課件.3.OpenGL二維觀察與三維變換3.1二維觀察3.2三維變換2ppt課件.3.OpenGL二維觀察與三維變換3.1二維觀察2ppt課3.1OpenGL二維觀察3實(shí)現(xiàn)二維觀察的步驟:3.1.1指定矩陣堆棧3.1.2指定裁剪窗口3.1.3指定視區(qū)3ppt課件.3.1OpenGL二維觀察3實(shí)現(xiàn)二維觀察的步驟:3ppt課3.1.1指定矩陣堆棧4指定當(dāng)前操作的是投影矩陣堆棧glMatrixMode(GL_PROJECTION);初始化,即指定當(dāng)前操作的矩陣堆棧的棧頂元素為單位矩陣。glLoadIdentity();4ppt課件.3.1.1指定矩陣堆棧4指定當(dāng)前操作的是投影矩陣堆棧4ppt3.1.2指定裁剪窗口5定義二維裁剪窗口gluOtho2D(xwmin,xwmax,ywmin,ywmax);其中,雙精度浮點(diǎn)數(shù)xwmin,xwmax,ywmin,ywmax分別對應(yīng)裁剪窗口的左、右、下、上四條邊界。默認(rèn)的裁剪窗口,四條邊界分別為wxl=-1.0,wxr=1.0,wyt=-1.0,wyb=1.0。5ppt課件.3.1.2指定裁剪窗口5定義二維裁剪窗口5ppt課件.3.1.3指定視區(qū)6指定視區(qū)glViewPort(xvmin,yvmin,vpWidth,vpHeighht);xvmin和yvmin指定了對應(yīng)于屏幕上顯示窗口中的矩形視區(qū)的左下角坐標(biāo),單位為像素。整型值vpWidth和vpHeighht則指定了視區(qū)的寬度和高度。默認(rèn)的視區(qū)大小和位置與顯示窗口保持一致。6ppt課件.3.1.3指定視區(qū)6指定視區(qū)6ppt課件.3.1OpenGL二維觀察例子教材【程序6-2】7ppt課件.3.1OpenGL二維觀察例子7ppt課件.3.2.1變換種類3.2.2模型視圖矩陣3.2.3矩陣操作3.2.4矩陣堆棧3.2.5投影變換3.2.6剪切變換83.2OpenGL中的變換8ppt課件.3.2.1變換種類83.2OpenGL中的變換8ppt課件.視圖變換:指定觀察者或攝影機(jī)的位置;模型變換:在場景中移動對象;模型視圖變換:描述視圖變換與模型變換的對偶性;投影變換:對視見空間進(jìn)行修剪和改變大??;視見區(qū)變換:對窗口的最終輸出進(jìn)行縮放;93.2.1變換種類9ppt課件.視圖變換:指定觀察者或攝影機(jī)的位置;93.2.1變換種類9p視圖變換:指定觀察者或攝影機(jī)的位置;視圖變換是第一個應(yīng)用到場景上的變換。它用于確定場景的有利位置。默認(rèn)情況下,觀察點(diǎn)位于原點(diǎn),順著z軸的負(fù)向看。視圖變換使你可以將觀察點(diǎn)放置在任何期望的位置上,從任何方向進(jìn)行觀察。確定視圖變換相當(dāng)于在場景中放置一部攝像機(jī)并確定其指向。在工作時間表上,必須先指定視圖變換再指定其他任何變換。103.2.1變換種類10ppt課件.視圖變換:指定觀察者或攝影機(jī)的位置;103.2.1變換種類1模型變換:在場景中移動對象;模型變換用于處理模型和模型內(nèi)的特定對象。這些變換把對象移動到合適的位置,旋轉(zhuǎn)它們,并對它們進(jìn)行縮放。模型變換實(shí)際上就是幾何變換。113.2.1變換種類11ppt課件.模型變換:在場景中移動對象;113.2.1變換種類11ppt模型視圖變換:描述視圖變換與模型變換的對偶性;從內(nèi)部效果和它們對場景最終外觀的效果來說,視圖變換和模型變換是相同的,把這兩者分開完全是為了程序員的方便,向后移動對象和向前移動參考系之間并沒有本質(zhì)差別。術(shù)語“模型視圖”表示你可以把這類變換視為模型變換或視圖變換,但實(shí)際上并無區(qū)別,因此稱它為模型視圖變換。

123.2.1變換種類12ppt課件.模型視圖變換:描述視圖變換與模型變換的對偶性;123.2.1投影變換:對視見空間進(jìn)行修剪和改變大??;投影變換應(yīng)用到最終的模型視圖方向。投影實(shí)際上定義了視見空間并建立了修剪平面。更明確一些,投影變換指定已完成場景如何轉(zhuǎn)換成屏幕上的最終圖象。常用的投影變換包括正投影和透視投影。133.2.1變換種類13ppt課件.投影變換:對視見空間進(jìn)行修剪和改變大??;133.2.1變換種視見區(qū)變換:對窗口的最終輸出進(jìn)行縮放;把場景的一個二維投影映射到屏幕上某處的窗口。這個到物理窗口坐標(biāo)的映射是最后完成的一項(xiàng)變換,它稱為視見區(qū)變換。143.2.1變換種類14ppt課件.視見區(qū)變換:對窗口的最終輸出進(jìn)行縮放;143.2.1變換種類在計(jì)算機(jī)圖形學(xué)中,所有的變換都是通過矩陣乘法來實(shí)現(xiàn)的,即將物體頂點(diǎn)構(gòu)成的齊次坐標(biāo)矩陣乘以三維變換矩陣就得到了變換后的物體頂點(diǎn)的齊次坐標(biāo)矩陣,這樣只要求出物體的三維變換矩陣,就可以得到變換后的物體。在OpenGL中,對象的坐標(biāo)變換也通過矩陣來實(shí)現(xiàn)的(雖然并不一定要自己定義矩陣)。通常,在OpenGL中使用了兩個重要的矩陣:模型視圖矩陣和投影矩陣,其中模型視圖矩陣用于物體的模型視圖變換,投影矩陣用于投影變換。

153.2.1變換種類15ppt課件.在計(jì)算機(jī)圖形學(xué)中,所有的變換都是通過矩陣乘法來實(shí)現(xiàn)的,即將物有了模型視圖矩陣和投影矩陣,在OpenGL中從未加工的頂點(diǎn)數(shù)據(jù)到屏幕坐標(biāo)的過程就包括如下步驟:1.將頂點(diǎn)坐標(biāo)轉(zhuǎn)換為規(guī)范化齊次坐標(biāo)矩陣;2.將頂點(diǎn)的規(guī)范化齊次坐標(biāo)矩陣乘以模型視圖矩陣,生成變換后的頂點(diǎn)齊次坐標(biāo)矩陣;3.將變換后的頂點(diǎn)齊次坐標(biāo)矩陣乘以投影矩陣,生成修剪坐標(biāo)矩陣,這樣就有效地排除了視見空間之外的所有數(shù)據(jù)。4.由修剪坐標(biāo)除以w坐標(biāo),得到規(guī)格化的設(shè)備坐標(biāo)。注意,在變換過程中,模型視圖矩陣和投影視圖矩陣都有可能改變坐標(biāo)的w值。5.坐標(biāo)三元組被視見區(qū)變換影射到一個2D平面。這也是一個矩陣變換,但在OpenGL中不能直接指定或修改它,系統(tǒng)會根據(jù)指定給glViewport的值在內(nèi)部設(shè)置它。163.2.1變換種類16ppt課件.有了模型視圖矩陣和投影矩陣,在OpenGL中從未加工的頂點(diǎn)數(shù)模型視圖矩陣用于指定場景的視圖變換和幾何變換,模型視圖矩陣是一個4×4的矩陣,它代表了用來放置和定位對象的經(jīng)過變換的坐標(biāo)系。在計(jì)算機(jī)圖形學(xué)中,物體進(jìn)行的幾何變換可以分解成多個基本幾何變換,而三維幾何變換矩陣是多個基本幾何變換矩陣相乘的結(jié)果。OpenGL提供了一些函數(shù)用于把任意矩陣設(shè)置成當(dāng)前操作的矩陣(模型視圖矩陣或投影矩陣)。

173.2.2模型視圖矩陣17ppt課件.模型視圖矩陣用于指定場景的視圖變換和幾何變換,模型視圖矩陣是glfloatm[]={1.0f,0.0f,3.0f,0.0f,0.0f,1.0f,0.0f,1.0f,0.0f,0.0f,1.0f,1.0f,0.0f,0.0f,0.0f,1.0f,};glMatrixMode(GL_MODELVIEW);glLoadMatrixf(m);這段程序中,先聲明了一個數(shù)組來保存4×4矩陣的值,注意這里矩陣按列優(yōu)先順序保存,這意味著先從上往下遍歷每一列;然后使用glLoadMatrix函數(shù)將定義的矩陣設(shè)置為當(dāng)前操作的矩陣。

183.2.2模型視圖矩陣18ppt課件.glfloatm[]={1.0f,0.0f,3.0如果需要執(zhí)行變換,即把定義的矩陣乘到模型視圖矩陣中??梢允褂煤瘮?shù)glMultmatrix,其函數(shù)原型如下:voidglMultMatrix{fd}(constTYPE*m);參數(shù)m為一個以列優(yōu)先順序保存16個連續(xù)值的數(shù)組。193.2.2模型視圖矩陣19ppt課件.如果需要執(zhí)行變換,即把定義的矩陣乘到模型視圖矩陣中。193.平移

旋轉(zhuǎn)

比例

203.2.2模型視圖矩陣20ppt課件.平移203.2.2模型視圖矩陣20ppt課件.平移voidglTranslate{fd}(TYPEx,TYPEy,TYPEz);參數(shù)x,y,z就是目標(biāo)分別沿三個軸的正向平移的偏移量。這個函數(shù)用這三個偏移量生成的矩陣完成乘法。當(dāng)參數(shù)是(0.0,0.0,0.0)時,生成的矩陣是單位矩陣,此時對物體沒有影響。213.2.2模型視圖矩陣21ppt課件.平移213.2.2模型視圖矩陣21ppt課件.旋轉(zhuǎn)voidglRotate{fd}(TYPEangle,TYPEx,TYPEy,TYPEz);函數(shù)中第一個參數(shù)是表示目標(biāo)沿從原點(diǎn)到指定點(diǎn)(x,y,z)的方向矢量逆時針旋轉(zhuǎn)的角度,后三個參數(shù)則是指定旋轉(zhuǎn)方向矢量的坐標(biāo)。這個函數(shù)表示用這四個參數(shù)生成的矩陣完成乘法。當(dāng)角度參數(shù)是0.0時,表示對物體沒有影響。

223.2.2模型視圖矩陣22ppt課件.旋轉(zhuǎn)223.2.2模型視圖矩陣22ppt課件.比例voidglScale{fd}(TYPEx,TYPEy,TYPEz);三個參數(shù)值就是目標(biāo)分別沿三個軸向縮放的比例因子。這個函數(shù)用這三個比例因子生成的矩陣完成乘法。這個函數(shù)能完成沿相應(yīng)的軸對目標(biāo)進(jìn)行拉伸、壓縮和反射三項(xiàng)功能。當(dāng)參數(shù)是(1.0,1.0,1.0)時,對物體沒有影響。當(dāng)其中某個參數(shù)為負(fù)值時,表示將對目標(biāo)進(jìn)行相應(yīng)軸的反射變換,且這個參數(shù)不為1.0,則還要進(jìn)行相應(yīng)軸的縮放變換。最好不要令三個參數(shù)值都為零,這將導(dǎo)致目標(biāo)沿三軸都縮為零。233.2.2模型視圖矩陣23ppt課件.比例233.2.2模型視圖矩陣23ppt課件.3.2.2模型視圖矩陣視圖變換函數(shù)(定義觀察坐標(biāo)系)voidgluLookAt(GLdoubleeyex,GLdoubleeyey,GLdoubleeyez,GLdoublecenterx,GLdoublecentery,GLdoublecenterz,GLdoubleupx,GLdoubleupy,GLdoubleupz);視點(diǎn)位置:(eyex,eyey,eyez)參考點(diǎn)位置:(centerx,centery,centerz)向上矢量方向:(upx,upy,upz)24ppt課件.3.2.2模型視圖矩陣視圖變換函數(shù)(定義觀察坐標(biāo)系)24pp3.2.2模型視圖矩陣?yán)蛹t皮書cube.cmodel.c25ppt課件.3.2.2模型視圖矩陣?yán)?5ppt課件.263.2.3矩陣操作矩陣堆棧選擇

glMatrixMode(GLenummode);參數(shù)mode用于確定將哪個矩陣堆棧用于矩陣操作。GL_MODELVIEW:模型視圖矩陣堆棧GL_PROJECTION:投影矩陣堆棧GL_TEXTURE:紋理矩陣堆棧

26ppt課件.263.2.3矩陣操作矩陣堆棧選擇 26ppt課件.273.2.3矩陣操作通過上述的高級矩陣函數(shù),可以很方便地實(shí)現(xiàn)變換。問題:在調(diào)用函數(shù)時,修改的是當(dāng)前的模型視圖矩陣。新的矩陣隨后將成為當(dāng)前的模型視圖矩陣并影響此后繪制的圖形。這樣模型視圖矩陣函數(shù)在調(diào)用時,就會造成效果的積累。

27ppt課件.273.2.3矩陣操作通過上述的高級矩陣函數(shù),可以很方便地實(shí)283.2.3矩陣操作效果積累一段代碼://沿x軸正向移動10個單位glTranslatef(10.0f,0.0f,0.0f);glutSolidSphere(1.0f,15,15);

//沿y軸正向移動10個單位glTranslatef(0.0f,10.0f,0.0f);glutSolidSphere(1.0f);

這段代碼繪制了兩個球,第一個繪制的球的球心沿x軸正向移動了10個單位,而第二球不僅沿y軸正向移動10個單位,也沿x軸正向移動10個單位。這就是效果積累。

28ppt課件.283.2.3矩陣操作效果積累28ppt課件.3.2.3矩陣操作單位矩陣glTranslatef(10.0f,0.0f,0.0f);glutSolidSphere(1.0f,15,15);glTranslatef(0.0f,10.0f,0.0f);glutSolidSphere(1.0f,15,15);想要第二個球只沿y軸正向移動10個單位,一種簡單的方法是把模型矩陣復(fù)位,即通過給模型視圖矩陣加載上單位矩陣來復(fù)位原點(diǎn)。

glMatrixMode(GL_MODELVIEW);glLoadIdentity();29ppt課件.3.2.3矩陣操作單位矩陣glMatrixMode(GL_303.2.4矩陣堆棧實(shí)際上,在創(chuàng)建、裝入、相乘模型變換和投影變換矩陣時,都已用到堆棧操作。一般說來,矩陣堆棧常用于構(gòu)造具有繼承性的模型,即由一些簡單目標(biāo)構(gòu)成復(fù)雜模型。而在構(gòu)造復(fù)雜模型時,常常需要保存中間的變化狀態(tài),以便在進(jìn)行一些變換后能夠恢復(fù)。

30ppt課件.303.2.4矩陣堆棧實(shí)際上,在創(chuàng)建、裝入、相乘模型變換和投313.2.4矩陣堆棧OpenGL為模型視圖矩陣和投影矩陣各維護(hù)著一個“矩陣堆?!?,可以把當(dāng)前矩陣壓到堆棧中保存它,然后對當(dāng)前矩陣進(jìn)行修改。把矩陣彈出堆棧即可恢復(fù)。使用的函數(shù)如下:voidglPushMatrix(void); voidglPopMatrix(void);31ppt課件.313.2.4矩陣堆棧OpenGL為模型視圖矩陣和投影矩陣各323.2.4矩陣堆棧函數(shù)glPushMatrix用于將當(dāng)前矩陣壓入當(dāng)前矩陣堆棧,常用于保存當(dāng)前變換矩陣。函數(shù)glPopMatrix用于將最后一個(最頂上的)矩陣彈出當(dāng)前矩陣堆棧,常用于恢復(fù)當(dāng)前變換矩陣原先的狀態(tài),如果曾經(jīng)調(diào)用glPushMatrix把它保存起來的話。

32ppt課件.323.2.4矩陣堆棧函數(shù)glPushMatrix用于將333.2.4矩陣堆棧堆棧是有深度的,如果超出了堆棧深度或當(dāng)堆棧為空時試圖彈出一個矩陣值,都會發(fā)生錯誤??梢杂孟旅娴暮瘮?shù)獲取堆棧深度的最大值:glGet(GL_MAX_MODELVIEW_STACK_DEPTH);glGet(GL_MAX_PROJECTION_STACK_DEPTH);

33ppt課件.333.2.4矩陣堆棧堆棧是有深度的,如果超出了堆棧深度或當(dāng)343.2.5投影變換OpenGL中只提供了兩種投影方式,一種是平行投影(正射投影),另一種是透視投影。在投影變換之前必須指定當(dāng)前處理的是投影變換矩陣:glMatrixMode(GL_PROJECTION);

glLoadIdentity();34ppt課件.343.2.5投影變換OpenGL中只提供了兩種投影方式,一353.2.5投影變換平行投影視景體是一個矩形的平行管道,也就是一個長方體,其特點(diǎn)是無論物體距離相機(jī)多遠(yuǎn),投影后的物體大小尺寸不變。

OpenGL中平行投影函數(shù)共有兩個:glOrthogluOrtho2D

35ppt課件.353.2.5投影變換平行投影35ppt課件.363.2.5投影變換voidglOrtho(GLdoubleleft,GLdoubleright,GLdoublebottom,GLdoubletop,GLdoublenear,GLdoublefar);函數(shù)的操作是創(chuàng)建一個正射投影矩陣,并且用這個矩陣乘以當(dāng)前矩陣。近裁剪平面是一個矩形,矩形左下角點(diǎn)三維空間坐標(biāo)是(left,bottom,-near),右上角點(diǎn)是(right,top,-near);遠(yuǎn)裁剪平面也是一個矩形,左下角點(diǎn)空間坐標(biāo)是(left,bottom,-far),右上角點(diǎn)是(right,top,-far)。所有的near和far值同時為正或同時為負(fù)。如果沒有其他變換,正射投影的方向平行于Z軸,且視點(diǎn)朝向Z負(fù)軸。這意味著物體在視點(diǎn)前面時far和near都為負(fù)值,物體在視點(diǎn)后面時far和near都為正值。36ppt課件.363.2.5投影變換voidglOrtho(GLdou373.2.5投影變換voidgluOrtho2D(GLdoubleleft,GLdoubleright,GLdoublebottom,GLdoubletop);一個特殊的正射投影函數(shù),主要用于二維圖像到二維屏幕上的投影。其near和far缺省值分別為-1.0和1.0,所有二維物體的Z坐標(biāo)都為0.0。裁剪面是一個左下角點(diǎn)為(left,bottom)、右上角點(diǎn)為(right,top)的矩形。37ppt課件.373.2.5投影變換voidgluOrtho2D(GL3.2.5投影變換透視投影透視投影的特點(diǎn)是距離視點(diǎn)近的物體大,距離視點(diǎn)遠(yuǎn)的物體小,遠(yuǎn)到極點(diǎn)即為消失,成為滅點(diǎn)。它的視景體類似于一個頂部和底部都被切除掉的棱椎,也就是棱臺。OpenGL透視投影函數(shù)也有兩個:

glFrustumgluPerspective

38ppt課件.3.2.5投影變換透視投影38ppt課件.3.2.5投影變換voidglFrustum(GLdoubleleft,GLdoubleright,GLdoublebottom,GLdoubletop,GLdoublenear,GLdoublefar);此函數(shù)創(chuàng)建一個透視投影矩陣,并且用這個矩陣乘以當(dāng)前矩陣。參數(shù)只定義近裁剪平面的左下角點(diǎn)和右上角點(diǎn)的三維空間坐標(biāo),即(left,bottom,-near)和(right,top,-near);最后一個參數(shù)far是遠(yuǎn)裁剪平面的Z負(fù)值,其左下角點(diǎn)和右上角點(diǎn)空間坐標(biāo)由函數(shù)根據(jù)透視投影原理自動生成。near和far表示離視點(diǎn)的遠(yuǎn)近,它們總為正值。39ppt課件.3.2.5投影變換voidglFrustum(GLdouvoidgluPerspective(GLdoublefovy,GLdoubleaspect,GLdoublenear,GLdoublefar);它也創(chuàng)建一個對稱透視視景體,但它的參數(shù)定義于前面的不同,其操作是創(chuàng)建一個對稱的透視投影矩陣,并且用這個矩陣乘以當(dāng)前矩陣。參數(shù)fovy定義視野在X-Z平面(垂直方向上的可見區(qū)域)的角度,范圍是[0.0,180.0];參數(shù)aspect是投影平面的縱橫比(寬度與高度的比值);參數(shù)near和far分別是遠(yuǎn)近裁剪面沿Z負(fù)軸到視點(diǎn)的距離。3.2.5投影變換40ppt課件.voidgluPerspective(GLdouble3.2.5投影變換41ppt課件.3.2.5投影變換41ppt課件.3.2.6剪切變換在OpenGL中,除了利用投影變換中視景體定義的六個裁剪平面(上、下、左、右、前、后)外,還可繼續(xù)再定義一個或多個附加裁剪平面,對場景進(jìn)一步進(jìn)行裁減,以去掉場景中無關(guān)的目標(biāo)。42ppt課件.3.2.6剪切變換在OpenGL中,除了利用投影變換中視3.2.6剪切變換附加平面裁剪函數(shù)為:voidglClipPlane(GLenumplane,ConstGLdouble*equation);

這個函數(shù)定義一個附加的裁剪平面。其中參數(shù)equation指向一個包含四個雙精度浮點(diǎn)數(shù)的數(shù)組,這四個系數(shù)分別是裁剪平面Ax+By+Cz+D=0的A、B、C、D值。因此,由這四個系數(shù)就能確定一個裁剪平面。參數(shù)plane是符號常數(shù)GL_CLIP_PLANEi(i=0,1,...),用于指定裁剪面號。43ppt課件.3.2.6剪切變換附加平面裁剪函數(shù)為:43ppt課件.3.2.6剪切變換注意:在調(diào)用附加裁剪函數(shù)之前,必須先啟動glEnable(GL_CLIP_PLANEi),使得當(dāng)前所定義的裁剪平面有效;當(dāng)不再調(diào)用某個附加裁剪平面時,可用glDisable(GL_CLIP_PLANEi)關(guān)閉相應(yīng)的附加裁剪功能。44ppt課件.3.2.6剪切變換注意:44ppt課件.3.2.6剪切變換例子紅皮書clip.c45ppt課件.3.2.6剪切變換例子45ppt課件.3.2OpenGL中的變換綜合例子紅皮書planet.crobot.c46ppt課件.3.2OpenGL中的變換綜合例子46ppt課件.此課件下載可自行編輯修改,供參考!感謝您的支持,我們努力做得更好!此課件下載可自行編輯修改,供參考!OpenGL圖形編程48ppt課件.OpenGL圖形編程1ppt課件.3.OpenGL二維觀察與三維變換3.1二維觀察3.2三維變換49ppt課件.3.OpenGL二維觀察與三維變換3.1二維觀察2ppt課3.1OpenGL二維觀察50實(shí)現(xiàn)二維觀察的步驟:3.1.1指定矩陣堆棧3.1.2指定裁剪窗口3.1.3指定視區(qū)50ppt課件.3.1OpenGL二維觀察3實(shí)現(xiàn)二維觀察的步驟:3ppt課3.1.1指定矩陣堆棧51指定當(dāng)前操作的是投影矩陣堆棧glMatrixMode(GL_PROJECTION);初始化,即指定當(dāng)前操作的矩陣堆棧的棧頂元素為單位矩陣。glLoadIdentity();51ppt課件.3.1.1指定矩陣堆棧4指定當(dāng)前操作的是投影矩陣堆棧4ppt3.1.2指定裁剪窗口52定義二維裁剪窗口gluOtho2D(xwmin,xwmax,ywmin,ywmax);其中,雙精度浮點(diǎn)數(shù)xwmin,xwmax,ywmin,ywmax分別對應(yīng)裁剪窗口的左、右、下、上四條邊界。默認(rèn)的裁剪窗口,四條邊界分別為wxl=-1.0,wxr=1.0,wyt=-1.0,wyb=1.0。52ppt課件.3.1.2指定裁剪窗口5定義二維裁剪窗口5ppt課件.3.1.3指定視區(qū)53指定視區(qū)glViewPort(xvmin,yvmin,vpWidth,vpHeighht);xvmin和yvmin指定了對應(yīng)于屏幕上顯示窗口中的矩形視區(qū)的左下角坐標(biāo),單位為像素。整型值vpWidth和vpHeighht則指定了視區(qū)的寬度和高度。默認(rèn)的視區(qū)大小和位置與顯示窗口保持一致。53ppt課件.3.1.3指定視區(qū)6指定視區(qū)6ppt課件.3.1OpenGL二維觀察例子教材【程序6-2】54ppt課件.3.1OpenGL二維觀察例子7ppt課件.3.2.1變換種類3.2.2模型視圖矩陣3.2.3矩陣操作3.2.4矩陣堆棧3.2.5投影變換3.2.6剪切變換553.2OpenGL中的變換55ppt課件.3.2.1變換種類83.2OpenGL中的變換8ppt課件.視圖變換:指定觀察者或攝影機(jī)的位置;模型變換:在場景中移動對象;模型視圖變換:描述視圖變換與模型變換的對偶性;投影變換:對視見空間進(jìn)行修剪和改變大?。灰曇妳^(qū)變換:對窗口的最終輸出進(jìn)行縮放;563.2.1變換種類56ppt課件.視圖變換:指定觀察者或攝影機(jī)的位置;93.2.1變換種類9p視圖變換:指定觀察者或攝影機(jī)的位置;視圖變換是第一個應(yīng)用到場景上的變換。它用于確定場景的有利位置。默認(rèn)情況下,觀察點(diǎn)位于原點(diǎn),順著z軸的負(fù)向看。視圖變換使你可以將觀察點(diǎn)放置在任何期望的位置上,從任何方向進(jìn)行觀察。確定視圖變換相當(dāng)于在場景中放置一部攝像機(jī)并確定其指向。在工作時間表上,必須先指定視圖變換再指定其他任何變換。573.2.1變換種類57ppt課件.視圖變換:指定觀察者或攝影機(jī)的位置;103.2.1變換種類1模型變換:在場景中移動對象;模型變換用于處理模型和模型內(nèi)的特定對象。這些變換把對象移動到合適的位置,旋轉(zhuǎn)它們,并對它們進(jìn)行縮放。模型變換實(shí)際上就是幾何變換。583.2.1變換種類58ppt課件.模型變換:在場景中移動對象;113.2.1變換種類11ppt模型視圖變換:描述視圖變換與模型變換的對偶性;從內(nèi)部效果和它們對場景最終外觀的效果來說,視圖變換和模型變換是相同的,把這兩者分開完全是為了程序員的方便,向后移動對象和向前移動參考系之間并沒有本質(zhì)差別。術(shù)語“模型視圖”表示你可以把這類變換視為模型變換或視圖變換,但實(shí)際上并無區(qū)別,因此稱它為模型視圖變換。

593.2.1變換種類59ppt課件.模型視圖變換:描述視圖變換與模型變換的對偶性;123.2.1投影變換:對視見空間進(jìn)行修剪和改變大?。煌队白儞Q應(yīng)用到最終的模型視圖方向。投影實(shí)際上定義了視見空間并建立了修剪平面。更明確一些,投影變換指定已完成場景如何轉(zhuǎn)換成屏幕上的最終圖象。常用的投影變換包括正投影和透視投影。603.2.1變換種類60ppt課件.投影變換:對視見空間進(jìn)行修剪和改變大??;133.2.1變換種視見區(qū)變換:對窗口的最終輸出進(jìn)行縮放;把場景的一個二維投影映射到屏幕上某處的窗口。這個到物理窗口坐標(biāo)的映射是最后完成的一項(xiàng)變換,它稱為視見區(qū)變換。613.2.1變換種類61ppt課件.視見區(qū)變換:對窗口的最終輸出進(jìn)行縮放;143.2.1變換種類在計(jì)算機(jī)圖形學(xué)中,所有的變換都是通過矩陣乘法來實(shí)現(xiàn)的,即將物體頂點(diǎn)構(gòu)成的齊次坐標(biāo)矩陣乘以三維變換矩陣就得到了變換后的物體頂點(diǎn)的齊次坐標(biāo)矩陣,這樣只要求出物體的三維變換矩陣,就可以得到變換后的物體。在OpenGL中,對象的坐標(biāo)變換也通過矩陣來實(shí)現(xiàn)的(雖然并不一定要自己定義矩陣)。通常,在OpenGL中使用了兩個重要的矩陣:模型視圖矩陣和投影矩陣,其中模型視圖矩陣用于物體的模型視圖變換,投影矩陣用于投影變換。

623.2.1變換種類62ppt課件.在計(jì)算機(jī)圖形學(xué)中,所有的變換都是通過矩陣乘法來實(shí)現(xiàn)的,即將物有了模型視圖矩陣和投影矩陣,在OpenGL中從未加工的頂點(diǎn)數(shù)據(jù)到屏幕坐標(biāo)的過程就包括如下步驟:1.將頂點(diǎn)坐標(biāo)轉(zhuǎn)換為規(guī)范化齊次坐標(biāo)矩陣;2.將頂點(diǎn)的規(guī)范化齊次坐標(biāo)矩陣乘以模型視圖矩陣,生成變換后的頂點(diǎn)齊次坐標(biāo)矩陣;3.將變換后的頂點(diǎn)齊次坐標(biāo)矩陣乘以投影矩陣,生成修剪坐標(biāo)矩陣,這樣就有效地排除了視見空間之外的所有數(shù)據(jù)。4.由修剪坐標(biāo)除以w坐標(biāo),得到規(guī)格化的設(shè)備坐標(biāo)。注意,在變換過程中,模型視圖矩陣和投影視圖矩陣都有可能改變坐標(biāo)的w值。5.坐標(biāo)三元組被視見區(qū)變換影射到一個2D平面。這也是一個矩陣變換,但在OpenGL中不能直接指定或修改它,系統(tǒng)會根據(jù)指定給glViewport的值在內(nèi)部設(shè)置它。633.2.1變換種類63ppt課件.有了模型視圖矩陣和投影矩陣,在OpenGL中從未加工的頂點(diǎn)數(shù)模型視圖矩陣用于指定場景的視圖變換和幾何變換,模型視圖矩陣是一個4×4的矩陣,它代表了用來放置和定位對象的經(jīng)過變換的坐標(biāo)系。在計(jì)算機(jī)圖形學(xué)中,物體進(jìn)行的幾何變換可以分解成多個基本幾何變換,而三維幾何變換矩陣是多個基本幾何變換矩陣相乘的結(jié)果。OpenGL提供了一些函數(shù)用于把任意矩陣設(shè)置成當(dāng)前操作的矩陣(模型視圖矩陣或投影矩陣)。

643.2.2模型視圖矩陣64ppt課件.模型視圖矩陣用于指定場景的視圖變換和幾何變換,模型視圖矩陣是glfloatm[]={1.0f,0.0f,3.0f,0.0f,0.0f,1.0f,0.0f,1.0f,0.0f,0.0f,1.0f,1.0f,0.0f,0.0f,0.0f,1.0f,};glMatrixMode(GL_MODELVIEW);glLoadMatrixf(m);這段程序中,先聲明了一個數(shù)組來保存4×4矩陣的值,注意這里矩陣按列優(yōu)先順序保存,這意味著先從上往下遍歷每一列;然后使用glLoadMatrix函數(shù)將定義的矩陣設(shè)置為當(dāng)前操作的矩陣。

653.2.2模型視圖矩陣65ppt課件.glfloatm[]={1.0f,0.0f,3.0如果需要執(zhí)行變換,即把定義的矩陣乘到模型視圖矩陣中??梢允褂煤瘮?shù)glMultmatrix,其函數(shù)原型如下:voidglMultMatrix{fd}(constTYPE*m);參數(shù)m為一個以列優(yōu)先順序保存16個連續(xù)值的數(shù)組。663.2.2模型視圖矩陣66ppt課件.如果需要執(zhí)行變換,即把定義的矩陣乘到模型視圖矩陣中。193.平移

旋轉(zhuǎn)

比例

673.2.2模型視圖矩陣67ppt課件.平移203.2.2模型視圖矩陣20ppt課件.平移voidglTranslate{fd}(TYPEx,TYPEy,TYPEz);參數(shù)x,y,z就是目標(biāo)分別沿三個軸的正向平移的偏移量。這個函數(shù)用這三個偏移量生成的矩陣完成乘法。當(dāng)參數(shù)是(0.0,0.0,0.0)時,生成的矩陣是單位矩陣,此時對物體沒有影響。683.2.2模型視圖矩陣68ppt課件.平移213.2.2模型視圖矩陣21ppt課件.旋轉(zhuǎn)voidglRotate{fd}(TYPEangle,TYPEx,TYPEy,TYPEz);函數(shù)中第一個參數(shù)是表示目標(biāo)沿從原點(diǎn)到指定點(diǎn)(x,y,z)的方向矢量逆時針旋轉(zhuǎn)的角度,后三個參數(shù)則是指定旋轉(zhuǎn)方向矢量的坐標(biāo)。這個函數(shù)表示用這四個參數(shù)生成的矩陣完成乘法。當(dāng)角度參數(shù)是0.0時,表示對物體沒有影響。

693.2.2模型視圖矩陣69ppt課件.旋轉(zhuǎn)223.2.2模型視圖矩陣22ppt課件.比例voidglScale{fd}(TYPEx,TYPEy,TYPEz);三個參數(shù)值就是目標(biāo)分別沿三個軸向縮放的比例因子。這個函數(shù)用這三個比例因子生成的矩陣完成乘法。這個函數(shù)能完成沿相應(yīng)的軸對目標(biāo)進(jìn)行拉伸、壓縮和反射三項(xiàng)功能。當(dāng)參數(shù)是(1.0,1.0,1.0)時,對物體沒有影響。當(dāng)其中某個參數(shù)為負(fù)值時,表示將對目標(biāo)進(jìn)行相應(yīng)軸的反射變換,且這個參數(shù)不為1.0,則還要進(jìn)行相應(yīng)軸的縮放變換。最好不要令三個參數(shù)值都為零,這將導(dǎo)致目標(biāo)沿三軸都縮為零。703.2.2模型視圖矩陣70ppt課件.比例233.2.2模型視圖矩陣23ppt課件.3.2.2模型視圖矩陣視圖變換函數(shù)(定義觀察坐標(biāo)系)voidgluLookAt(GLdoubleeyex,GLdoubleeyey,GLdoubleeyez,GLdoublecenterx,GLdoublecentery,GLdoublecenterz,GLdoubleupx,GLdoubleupy,GLdoubleupz);視點(diǎn)位置:(eyex,eyey,eyez)參考點(diǎn)位置:(centerx,centery,centerz)向上矢量方向:(upx,upy,upz)71ppt課件.3.2.2模型視圖矩陣視圖變換函數(shù)(定義觀察坐標(biāo)系)24pp3.2.2模型視圖矩陣?yán)蛹t皮書cube.cmodel.c72ppt課件.3.2.2模型視圖矩陣?yán)?5ppt課件.733.2.3矩陣操作矩陣堆棧選擇

glMatrixMode(GLenummode);參數(shù)mode用于確定將哪個矩陣堆棧用于矩陣操作。GL_MODELVIEW:模型視圖矩陣堆棧GL_PROJECTION:投影矩陣堆棧GL_TEXTURE:紋理矩陣堆棧

73ppt課件.263.2.3矩陣操作矩陣堆棧選擇 26ppt課件.743.2.3矩陣操作通過上述的高級矩陣函數(shù),可以很方便地實(shí)現(xiàn)變換。問題:在調(diào)用函數(shù)時,修改的是當(dāng)前的模型視圖矩陣。新的矩陣隨后將成為當(dāng)前的模型視圖矩陣并影響此后繪制的圖形。這樣模型視圖矩陣函數(shù)在調(diào)用時,就會造成效果的積累。

74ppt課件.273.2.3矩陣操作通過上述的高級矩陣函數(shù),可以很方便地實(shí)753.2.3矩陣操作效果積累一段代碼://沿x軸正向移動10個單位glTranslatef(10.0f,0.0f,0.0f);glutSolidSphere(1.0f,15,15);

//沿y軸正向移動10個單位glTranslatef(0.0f,10.0f,0.0f);glutSolidSphere(1.0f);

這段代碼繪制了兩個球,第一個繪制的球的球心沿x軸正向移動了10個單位,而第二球不僅沿y軸正向移動10個單位,也沿x軸正向移動10個單位。這就是效果積累。

75ppt課件.283.2.3矩陣操作效果積累28ppt課件.3.2.3矩陣操作單位矩陣glTranslatef(10.0f,0.0f,0.0f);glutSolidSphere(1.0f,15,15);glTranslatef(0.0f,10.0f,0.0f);glutSolidSphere(1.0f,15,15);想要第二個球只沿y軸正向移動10個單位,一種簡單的方法是把模型矩陣復(fù)位,即通過給模型視圖矩陣加載上單位矩陣來復(fù)位原點(diǎn)。

glMatrixMode(GL_MODELVIEW);glLoadIdentity();76ppt課件.3.2.3矩陣操作單位矩陣glMatrixMode(GL_773.2.4矩陣堆棧實(shí)際上,在創(chuàng)建、裝入、相乘模型變換和投影變換矩陣時,都已用到堆棧操作。一般說來,矩陣堆棧常用于構(gòu)造具有繼承性的模型,即由一些簡單目標(biāo)構(gòu)成復(fù)雜模型。而在構(gòu)造復(fù)雜模型時,常常需要保存中間的變化狀態(tài),以便在進(jìn)行一些變換后能夠恢復(fù)。

77ppt課件.303.2.4矩陣堆棧實(shí)際上,在創(chuàng)建、裝入、相乘模型變換和投783.2.4矩陣堆棧OpenGL為模型視圖矩陣和投影矩陣各維護(hù)著一個“矩陣堆?!?,可以把當(dāng)前矩陣壓到堆棧中保存它,然后對當(dāng)前矩陣進(jìn)行修改。把矩陣彈出堆棧即可恢復(fù)。使用的函數(shù)如下:voidglPushMatrix(void); voidglPopMatrix(void);78ppt課件.313.2.4矩陣堆棧OpenGL為模型視圖矩陣和投影矩陣各793.2.4矩陣堆棧函數(shù)glPushMatrix用于將當(dāng)前矩陣壓入當(dāng)前矩陣堆棧,常用于保存當(dāng)前變換矩陣。函數(shù)glPopMatrix用于將最后一個(最頂上的)矩陣彈出當(dāng)前矩陣堆棧,常用于恢復(fù)當(dāng)前變換矩陣原先的狀態(tài),如果曾經(jīng)調(diào)用glPushMatrix把它保存起來的話。

79ppt課件.323.2.4矩陣堆棧函數(shù)glPushMatrix用于將803.2.4矩陣堆棧堆棧是有深度的,如果超出了堆棧深度或當(dāng)堆棧為空時試圖彈出一個矩陣值,都會發(fā)生錯誤??梢杂孟旅娴暮瘮?shù)獲取堆棧深度的最大值:glGet(GL_MAX_MODELVIEW_STACK_DEPTH);glGet(GL_MAX_PROJECTION_STACK_DEPTH);

80ppt課件.333.2.4矩陣堆棧堆棧是有深度的,如果超出了堆棧深度或當(dāng)813.2.5投影變換OpenGL中只提供了兩種投影方式,一種是平行投影(正射投影),另一種是透視投影。在投影變換之前必須指定當(dāng)前處理的是投影變換矩陣:glMatrixMode(GL_PROJECTION);

glLoadIdentity();81ppt課件.343.2.5投影變換OpenGL中只提供了兩種投影方式,一823.2.5投影變換平行投影視景體是一個矩形的平行管道,也就是一個長方體,其特點(diǎn)是無論物體距離相機(jī)多遠(yuǎn),投影后的物體大小尺寸不變。

OpenGL中平行投影函數(shù)共有兩個:glOrthogluOrtho2D

82ppt課件.353.2.5投影變換平行投影35ppt課件.833.2.5投影變換voidglOrtho(GLdoubleleft,GLdoubleright,GLdoublebottom,GLdoubletop,GLdoublenear,GLdoublefar);函數(shù)的操作是創(chuàng)建一個正射投影矩陣,并且用這個矩陣乘以當(dāng)前矩陣。近裁剪平面是一個矩形,矩形左下角點(diǎn)三維空間坐標(biāo)是(left,bottom,-near),右上角點(diǎn)是(right,top,-near);遠(yuǎn)裁剪平面也是一個矩形,左下角點(diǎn)空間坐標(biāo)是(left,bottom,-far),右上角點(diǎn)是(right,top,-far)。所有的near和far值同時為正或同時為負(fù)。如果沒有其他變換,正射投影的方向平行于Z軸,且視點(diǎn)朝向Z負(fù)軸。這意味著物體在視點(diǎn)前面時far和near都為負(fù)值,物體在視點(diǎn)后面時far和near都為正值。83ppt課件.363.2.5投影變換voidglOrtho(GLdou843.2.5投影變換voidgluOrtho2D(GLdoubleleft,GLdoubleright,GLdoublebottom,GLdoubletop);一個特殊的正射投影函數(shù),主要用于二維圖像到二維屏幕上的投影。其near和far缺省值分別為-1.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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論