openGL中的gluLookAt函數

來源:互聯網
上載者:User

osg中camera->setViewMatrixAsLopengl 的函數相當於opengl中的glulookat

openGL變換小節:

視圖:指定觀察者或攝像機的位置

模型:在情境中移動對象

模型視圖:描述視圖變換盒模型變換的對偶性

投影:對視見空間進行修剪和改變大小

視見區: 對到視窗的最終輸出進行縮放

眼座標:來自觀察者的觀察點,與可能發生的任何變換無關,可以把它們視為“絕對”螢幕座標。因此並不是真正的座標,而是代表一個虛擬固定座標系,用作參考的公用架構。大部分變換都是根據它們相對於眼座標系的效果來描述的。

 

視圖變換的過程如下:視圖(eye)變換或者模型變換,投影變換(正射投影和透視投影),視見區變換。

利用實用庫函數gluLookAt()設定視覺座標系。在實際的編程應用中,使用者在完成情境的建模後,往往需要選擇一個合適的視角或者不停地變換視角,以對情境作觀察。實用庫函數gluLookAt()就提供了這樣的一個功能。

void gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez,

      GLdouble centerx,GLdouble centery,GLdouble centerz,

      GLdouble upx,GLdouble upy,GLdouble upz);

該函數定義一個視圖矩陣,並與當前矩陣相乘。

eyex, eyey,eyez 指定視點的位置

centerx,centery,centerz 指定參考點的位置

upx,upy,upz 指定視點向上的方向

 

 

視點E、參考點C、視點向上的方向U實際上就是設定了一個視覺座標系。這個視覺座標系的原點是E,視線的方向(即z軸)是C-U,y軸方向就是視點向上的方向U,剩下的x軸方向就是向量((C-E)*U)。由於y軸和x軸是垂直的,所以也要求向量(C-U)和U互相垂直。這點在設定該函數參數時是必須注意的。

還是最後一句:

由於y軸和x軸是垂直的,所以也要求向量(C-E)和U互相垂直。這點在設定該函數參數時是必須注意的。

應用中不垂直也是沒問題的,所以有找了個可能更合理的解釋

void gluLookAt(

GLdouble eyex,

GLdouble eyey,

GLdouble eyez,

GLdouble centerx,

GLdouble centery,

GLdouble centerz,

GLdouble upx,

GLdouble upy,

GLdouble upz

);

eye=(eyex, eyey, eyez)是視點(原點)的位置

center = (centerx, centery, centerz)是視口中心點的位置

center - eye是z軸負方向

z = (eye - center) / |eye - center|

up = (upx, upy, upz) - eye表示上方

x軸正方向x = up × z / |up × z|

y軸正方向(就是正上方)y = z × x

原文地址:http://blog.163.com/zhaoxin851055@126/blog/static/81129298200921052929831/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.