資源描述:
《OpenGL透視函數(shù)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、OpenGL入門(mén)紀(jì)錄--2.透視函數(shù)glFrustum(),gluPerspective()函數(shù)用法和glOrtho()函數(shù)用法在OpenGL中,如果想對(duì)模型進(jìn)行操作,就要對(duì)這個(gè)模型的狀態(tài)(當(dāng)前的矩陣)乘上這個(gè)操作對(duì)應(yīng)的一個(gè)矩陣.如果乘以變換矩陣(平移,縮放,旋轉(zhuǎn)),那相乘之后,模型的位置被變換;如果乘以投影矩陣(將3D物體投影到2D平面),相乘后,模型的投影方式被設(shè)置;如果乘以紋理矩陣(),模型的紋理方式被設(shè)置.而用來(lái)指定乘以什么類型的矩陣,就是glMatriMode(GLenummode);glMatrixMode有3種模式:GL_PROJECTION投影,
2、GL_MODELVIEW模型視圖,GL_TEXTURE紋理.所以,在操作投影矩陣以前,需要調(diào)用函數(shù):glMatrixMode(GL_PROJECTION);//將當(dāng)前矩陣指定為投影矩陣然后把矩陣設(shè)為單位矩陣:glLoadIdentity();然后調(diào)用glFrustum()或gluPerspective(),它們生成的矩陣會(huì)與當(dāng)前的矩陣相乘,生成透視的效果;1.glFrustum()這個(gè)函數(shù)原型為: voidglFrustum(GLdoubleleft,GLdoubleRight,GLdoublebottom,GLdoubletop,GLdoublenear,G
3、Ldoublefar);創(chuàng)建一個(gè)透視型的視景體。其操作是創(chuàng)建一個(gè)透視投影的矩陣,并且用這個(gè)矩陣乘以當(dāng)前矩陣。這個(gè)函數(shù)的參數(shù)只定義近裁剪平面的左下角點(diǎn)和右上角點(diǎn)的三維空間坐標(biāo),即(left,bottom,-near)和(right,top,-near);最后一個(gè)參數(shù)far是遠(yuǎn)裁剪平面的離視點(diǎn)的距離值,其左下角點(diǎn)和右上角點(diǎn)空間坐標(biāo)由函數(shù)根據(jù)透視投影原理自動(dòng)生成。near和far表示離視點(diǎn)的遠(yuǎn)近,它們總為正值(near/far必須>0)。2.gluPerspective()這個(gè)函數(shù)原型為:voidgluPerspective(GLdoublefovy,GLdouble
4、aspect,GLdoublezNear,GLdoublezFar); 創(chuàng)建一個(gè)對(duì)稱的透視型視景體,但它的參數(shù)定義于前面的不同,如圖。其操作是創(chuàng)建一個(gè)對(duì)稱的透視投影矩陣,并且用這個(gè)矩陣乘以當(dāng)前矩陣。參數(shù)fovy定義視野在Y-Z平面的角度,范圍是[0.0,180.0];參數(shù)aspect是投影平面寬度與高度的比率;參數(shù)Near和Far分別是近遠(yuǎn)裁剪面到視點(diǎn)(沿Z負(fù)軸)的距離,它們總為正值?! ∫陨蟽蓚€(gè)函數(shù)缺省時(shí),視點(diǎn)都在原點(diǎn),視線沿Z軸指向負(fù)方向。voidmydisplay(void){????......???glMatrixMode(GL_PROJECTION
5、);???LoadIdentity();???Frustum(left,right,bottom,top,near,far);???......}3.glOrtho()這個(gè)函數(shù)的原型為:glOrtho(GLdoubleleft,GLdoubleright,GLdoublebottom,GLdoubletop,GLdoublenear,GLdoublefar)六個(gè)參數(shù),前兩個(gè)是x軸最小坐標(biāo)和最大坐標(biāo),中間兩個(gè)是y軸,最后兩個(gè)是z軸值它創(chuàng)建一個(gè)平行視景體(就是一個(gè)長(zhǎng)方體空間區(qū)域)。實(shí)際上這個(gè)函數(shù)的操作是創(chuàng)建一個(gè)正射投影矩陣,并且用這個(gè)矩陣乘以當(dāng)前矩陣。其中近裁剪平面
6、是一個(gè)矩形,矩形左下角點(diǎn)三維空間坐標(biāo)是(left,bottom,-near),右上角點(diǎn)是(right,top,-near);遠(yuǎn)裁剪平面也是一個(gè)矩形,左下角點(diǎn)空間坐標(biāo)是(left,bottom,-far),右上角點(diǎn)是(right,top,-far)。注意,所有的near和far值同時(shí)為正或同時(shí)為負(fù),值不能相同。如果沒(méi)有其他變換,正射投影的方向平行于Z軸,且視點(diǎn)朝向Z負(fù)軸。這意味著物體在視點(diǎn)前面時(shí)far和near都為負(fù)值,物體在視點(diǎn)后面時(shí)far和near都為正值。只有在視景體里的物體才能顯示出來(lái)。如果最后兩個(gè)值是(0,0),也就是near和far值相同了,視景體深度
7、沒(méi)有了,整個(gè)視景體都被壓成個(gè)平面了,就會(huì)顯示不正確。