簡介
視點轉換
函式原型
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 相機向上的方向在世界坐標中的方向
你把相機想像成為你自己的腦袋:
第一組數據就是腦袋的位置
第二組數據就是眼睛看的物體的位置
第三組就是頭頂朝向的方向(因為你可以歪著頭看同一個物體)
參數
gluLookAt()共有九個參數,分別是眼睛的位置,眼睛朝向的位置,以及相機朝向的方向。
該函式定義了視點矩陣,並用該矩陣乘以當前矩陣。eyex、eyey、eyez定義了視點的位置;centerx、centery和centerz變數指定了參考點的位置,該點通常為相機所瞄準的場景中心軸線上的點;upx、upy、upz變數指定了向上向量的方向。(注意,這是一個向量,不是一個坐標)
說明
通常,視點轉換操作在模型轉換操作之前發出(例如視點轉換矩陣N,模型轉換矩陣M,頂點v,結果應該為NMv,這樣才能保證M先和v相乘,即模型轉換先套用在頂點上),以便模型轉換先對物體發生作用。場景中物體的頂點經過模型轉換之後移動到所希望的位置,然後再對場景進行視點定位等操作。模型轉換和視點轉換共同構成模型視景矩陣。
gluLookAt可以在投影變換之後或模型變換後調用。因為投影變換是設定視景體的大小和形狀,gluLookAt即設定視景體在世界坐標的位置和方向來觀察物體,所以只要gluLookAt在視景體設定完成後調用即可,與變換模式無關。
gluPerspective函式是對投影矩陣進行變換(GL_PROJECTION),這一點一定要搞清楚。在實際套用時,可以用gluPerspective函式設定近平面、遠平面。