OpenGL的gluLookAt和glOrtho的關系


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都寫成正的,這個正的方向是指的,從攝像機指向負軸方向的距離。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM