2011-04-19 60 views
22

試圖瞭解gluLookAt,特別是最後3個參數。gluLookAt解釋?

有人能解釋一下嗎?

gluLookAt(camera[0], camera[1], camera[2], /* look from camera XYZ */ 
      0, 0, 0, /* look at the origin */ 
      0, 1, 0); /* positive Y up vector */ 
  1. 正是它的 「正Y方向向量」 是什麼意思?
  2. 是否有可能將最後的向上向量3參數全部設爲1,例如, 1,1,1?而且,如果可能的話,究竟意味着什麼?
  3. 向上向量的值是否可能大於1,例如: 2,3,4?

謝謝。

回答

2

最後一個矢量,也被稱爲照相機向上矢量定義攝像機的方向。

想象一個附着在「真實」相機頂部的棒。棒的方向是向上的向量。

通過改變它從(0,1,0)你可以做側身滾動。

+0

還是不太明白。當參數是(1,0,0)vs(0,0,0)vs(0,0,1)時向上矢量的差異是什麼?在網站上找不到任何圖片來幫助我理解。如果有人知道在哪裏可以找到,請告訴我。 – 2011-04-19 14:16:16

+1

@Johnnt:想想你的地板上的某個特定地點的觀察者,朝向門看。現在,那個觀察者可以坐着,躺在他們的左邊,或者躺在他們的右邊。除了他們的位置和他們看的方向之外,你需要知道觀察者頭部的旋轉。 – 2011-04-19 14:36:02

+1

在Ben的解釋之上進一步展開,想象一下帶有頂部天線的相機。這是相機「起來」。作爲一款手持式攝像機,想象一下,您在旋轉攝像機的同時保持指向您的主體!現在,相機可以指向任何方向,甚至是顛倒的!這就是gluLookAt的XYZ座標的原因 - 告訴GL相機被保持的方式。在大部分情況下,0,1,0都可以工作,但如果攝像機直線向上或直線向下看時會出現問題,在這種情況下,0,0,1是一個很好的起點,但您可能想要嘗試。 – Olie 2011-05-30 14:45:40

41

Sketchup to the rescue!

GluLookAt params

你的形象有一個「上」它可以從世界上最高獨立。這幅圖像中的藍色窗口可以被認爲是您的圖像所繪製的「近平面」:您的顯示器,如果您願意的話。如果你所提供的只是眼點和目標點,那麼這個窗口可以自由旋轉。你需要給一個額外的「向上」方向來把它放下。如果OpenGL不是單位長度,那麼OpenGL將規格化您提供的矢量。的OpenGL也將投射下來,使得它形成了一個90度的角度與在(由限定的「Z」矢量除非給一個「上」載體,其是在恰好相同的方向的線從'眼睛'到'at')。一旦'入'(z)和'向上'()方向被定義,很容易從這兩個方向計算'正確'或(x)的方向。

在該圖中,如果藍色軸在y方向上,則「提供」向上矢量爲(0,1,0)。如果你要給(1,1,1),它很可能將圖像旋轉45度,因爲這是說藍色窗口的頂部應指向該方向。因此,這個人的形象似乎會傾斜(在相反的方向)。

2

前3個參數是攝像頭位置 接下來3個參數是目標位置 最後3個參數代表攝像頭的滾動。

非常重要的事情是在「glMatrixMode(GL_MODELVIEW);」之後使用gluLookAt;

其他有用的提示總是爲最後3個參數指定它0,0,1。 一般座標寫爲x,y,z。 z是向上的。 0,1,0混淆爲x,z,y。

所以最好的事情留給0,0,1。

+0

如果您仍然無法理解,那麼您總是可以嘗試使用矢量進行試驗。 – Fennekin 2014-10-15 03:28:59