2015-11-24 66 views
3

我想創建一個攝像頭,垂直看地面視圖矩陣:GLM ::的lookAt返回矩陣楠元素

glm::mat4 matrix = glm::lookAt(glm::vec3(0.0f, 1.0f, 0.0f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f)); 

最後一個參數是全局的向上矢量,所以一切似乎是正確的但我得到以下matirx:

-nan -nan -0 0 
-nan -nan  1 0 
-nan -nan -0 0 
nan  nan -1 1 

我想我得到楠,因爲看看矢量是平行的向上矢量,但我怎麼能建立使用GLM ::的lookAt功能正確看待矩陣。

回答

6

問題出在您的相機的位置或向上的向量上。

您的相機是1單位(0,1,0),俯視原點(0,0,0)。向上矢量表示相機的向上方向,而不是世界空間。例如,如果你期待,向上的向量將是+ Y。如果你向下看,頭頂朝上+ X,那麼向上的向量就是+ X。它必須與攝像機的位置矢量完全不同步。

解決方案:

  • 沿着XZ平面向上向量變更到什麼
  • 或東西是不是(0,0,0)在投射到XZ平面
  • 移動您的相機,它是任何地方,但沿着Y軸
3

lookAt這是不可能的觀看方向和向上看在同一方向。如果您想讓攝像機沿着負y軸看,則必須調整向上向量,例如,調整爲[0,0,1]。在向上矢量中指定的方向控制攝像機圍繞視圖軸旋轉的方式。