[OpenGL]OpenGL幾何變換的祕密--投影(透視投影、平行投影、正投影)

1.透視投影

如下a圖,透視投影是從某個投影點將物體投影到單一投影面上所得到的圖形,透視投影符合人們心理習慣,即離視點近的物體大,離視點遠的物體小,遠到極點即爲消失。在透視投影中,同一燈光下,改變物體的位置和方向,其投影也跟着發生變化

2.平行投影

如下b圖,平行投影是在一束平行光線照射下形成的投影。在平行投影中,同一時刻改變物體的方向和位置,其投影也跟着發生變化;投影大小與物體和投影面之間的距離無關。度量性較好。
在這裏插入圖片描述

3.正投影

正投影是平行投影的一種特殊形式,投影方向和投影面垂直,正投影法的特點是,能準確、完整地表達出形體的形狀和結構,且作圖簡便,度量性較好

投影變換:給定視點、視線方向,計算出當前頂點的投影點的座標

在OpenGL中有三個函數glFrustum(),gluPerspective(),glOrtho()

1.void glFrustum(GLdouble left,GLdouble Right,GLdouble bottom, GLdouble top, GLdouble near, GLdouble far)

創建一個透視型的視椎體,其操作是創建一個透視投影的矩陣,並且用這個矩陣乘以當前矩陣。
這個函數的參數之定義,只定義近才見面的左下角點和右上角點的三維空間座標,即(left,bottom,-near)和(right,top,-near),最後一個參數far是裁減面的,離視點的距離值,其左下角和右上角空間座標由函數根據透視投影原理自動生成,near和far爲正值,即必須>0
在這裏插入圖片描述

2.void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar);

創建一個對稱的透視型視椎體,其操作是創建一個對稱的透視投影矩陣。參數fovy定義視野在Y-Z平面的角度,範圍是[0.0, 180.0],參數aspect是投影平面寬度與高度的比例;參數near和far分別是近遠裁剪面到視點的距離,沿Z負軸,總爲正值
在這裏插入圖片描述
總結:以上兩個函數視點都在原點,視線沿z軸指向負方向
void mydisplay()
{

glMatrixMode(GL_PROJECTION);
LoadIdentity();
Frustum(left,right,bottom,top,near,far)

}

3.glOrtho(GLdobule left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble near,GLdouble far)

六個參數,前面來給個是x軸最小座標和最大座標,中間兩個是y軸,最後兩個是z軸
這個函數創建的是一個平行視景體,就是一個長方體區域,實際上是創建一個正射投影矩陣,並且用這個矩陣乘以當前矩陣,所有的near和far值同時爲正,或者同時爲負u,值不能相同,如果沒有其他變換,正射投影的方向平行於z軸,且視點朝向z負軸,這意味着物體在視點前面時far和near都是負值,在視點後面時far和near都爲正值,只有在視景體裏面的物體才能顯示出來
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章