OpenGL的gluLookAt和glOrtho的關系
一直不明白gluLookAt()和glOrtho()兩者之間的關系:
gluLookAt()是觀察變換,glOrtho()是正交投影。
glLookAt()是攝像機的位置,glOrtho()是將當前的可視空間設置為正投影空間。
gluLookAt()作用MODELVIEW矩陣,glOrtho()作用PROJECTION矩陣。
可有時畫的圖形看不見,有時又可以看見,那它們到底有什么聯系呢?我們往下看:
先看看這兩個函數的定義:
void glOrtho(GLdouble left,
GLdouble right,
GLdouble bottom,
GLdouble top,
GLdouble near,
GLdouble far);
void gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez,
GLdouble centerx, GLdouble centery, GLdouble centerz,
GLdouble upx, GLdouble upy, GLdouble upz);
代碼實例:
glOrtho(-1,1,-1,1,-3,3); gluLookAt(0,0,2.9,0,0,0,0,1,0); glColor3f(1.0, 0.0, 0.0); glViewport(0, 0, 400, 400); glBegin(GL_LINES); glVertex3f(-1.0, 0,-0.1); glVertex3f(1.0, 0 ,-0.1); glVertex3f(0.0, -1.0,-0.1); glVertex3f(0.0, 1.0 ,-0.1); glEnd();
使用gluLookAt函數設定的攝像機范圍,但是其視野就是glOrtho中的near和far。如上面的那個程序其遠近在(2.9+3,2.9-3)這個范圍內,所以-0.1剛好擦邊,這兩條線還能看到。
而且,如果你的圖形畫在了攝像機的后面,可是在<5.9這個范圍內(這兩個視野的范圍都是開區間),還是可以看到圖形的。
所以為了邏輯上的對應,我們應該將near和far都寫成正的,這個正的方向是指的,從攝像機指向負軸方向的距離。