opengl的gluLookAt函式需要9個引數,其中前三個是眼睛位置設為點E,中間三個為目標位置設為點A,那么視線反向的向量為A-E;最后三個引數為up向量,即腦袋朝上方向;就我個人理解腦袋朝上方向應該和視線方向垂直,所以向量up和向量(A-E)的內積應該為0。但是在https://blog.csdn.net/yangzhiloveyou/article/details/20299759上他的結論卻是(A-Up)要和Up垂直,而http://www.it1352.com/501532.html又說up方向和視線方向不需要垂直。搞不懂的是到底自己設定的up方向和視線方向要不要垂直,自己設定的如果不垂直,那么OpenGL的程式是不是會自動對引數做出修改呢。
uj5u.com熱心網友回復:
應該是不需要垂直,檔案上根本沒提到垂直。uj5u.com熱心網友回復:
不垂直是opengl代碼會自動調整UP向量的值嗎,視線和UP向量理論上是必須要垂直的吧uj5u.com熱心網友回復:
理論上是應該垂直的吧,想象不出UP方向和視線方向不垂直的話怎么成象。是不是OpenGL相關函式的代碼中會做出相關調整,比如視線方向不變,調整UP向量的值,使得UP向量和視線垂直
uj5u.com熱心網友回復:
void SetCamera(){
double x,y,z, The,Phi;
Phi = (double)globMouse.MoveX / (double)globMouse.ScreenX * M_PI * 2.0;
The = (double)globMouse.MoveY / (double)globMouse.ScreenY * M_PI * 2.0;
x = globMouse.Radius * cos (Phi) * cos (The);
y = globMouse.Radius * sin (The);
z = globMouse.Radius * sin (Phi) * cos (The);
int Oben = (The <= 0.5 * M_PI || The > 1.5 * M_PI) * 2 - 1;
gluLookAt (x,y,z, 0,0,0, 0,Oben,0);// ==0
// 相當于我們的腦袋位置在(0.0,0.0,5.0)處,
// 眼睛望向(0.0,0.0,0.0),即原點。
// 后面的三個引數(0.0,1.0,0.0),y軸為1,其余為0,表示腦袋朝上,就是正常的情況。
// 如果并沒有呼叫gluLookAt(),那么照相機就被設定為默認的位置和方向。
// 在默認情況下,照相機位于原點,指向z軸的負方向,朝上向量為(0,1,0)。
}
gluLookAt(0.0, 0.0, 5.0, /* eye is at (0,0,5) */
0.0, 0.0, 0.0, /* center is at (0,0,0) */
0.0, 1.0, 0.); /* up is in postivie Y direction */
uj5u.com熱心網友回復:
這9個引數的意思我倒是知道,我想問的是up向量是否必須和視線方向垂直,就算設定的引數是不垂直的,gluLookAt函式內部是否會對UP向量做出調整,使得UP和視線垂直
uj5u.com熱心網友回復:
https://blog.csdn.net/yangzhiloveyou/article/details/20299759說的應該 對
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/46963.html
標籤:圖形處理/算法
