2012-11-14 49 views
0

我有以下問題。我有一個使用lookAt方法的攝像頭,它工作的很好。我有一個父攝像頭的父節點。如果我在保留攝像頭的同時旋轉父節點看着目標,相機的外觀也發生了變化。那也不是我想要達到的目標。當你將相機歸爲空物體時,我需要它像Adobe AE一樣工作:當空物體旋轉時,相機開始圍繞目標進行圍繞運動仍在觀察目標。我目前所做的是將父模型矩陣與從lookAt()方法計算出來的相機模型矩陣相乘。我相信在乘以它們之前需要對其中一個矩陣進行分解(或重新組合).Parent模型或相機型號?這裏的任何人都可以展示正確的方式嗎?當旋轉父節點時,攝像頭的目標變化

更新:父母只是一個節點。孩子是攝像頭。AfterEffects中的父攝像頭的工作原理如下:如果您在攝像頭看到目標時旋轉父節點,攝像頭實際上開始圍繞基於目標的軌道在父母的旋轉。在我的情況下,父輪換也改變了相機的外觀方向,這不是我想要的。希望現在很清楚。 UPDATE1: 我使用GL 4.0,沒有固定管道,我所有的數學手動完成。

回答

0

實際問題出現在視圖和模型矩陣的狀態。我錯誤地將視圖矩陣倒過來,它的位置向量已經被否定了。所以正確的做法是將父節點模型矩陣與攝像機視圖矩陣相乘並解決問題。

0

OpenGL不是場景圖;有沒有物體,沒有相機! gluLookAt甚至不是OpenGL,它只是一個輔助函數,它沒有任何變換層次的意識。由於OpenGL不處理場景和glPushMatrix,因此glPopMatrix會給出一個錯誤的感覺,這種感覺可能會發生更大的變化,您可能會被引誘以錯誤的方式來思考它。

這是你的責任,做你所期望的所有數學。以下是您的操作:

  1. 您不應再使用OpenGL固定功能矩陣操縱方法。它們已被棄用,並已從較新版本的OpenGL中刪除!

  2. 實現全功能場景圖。爲此使用功能完整的矩陣數學庫。最重要的是,您需要一種方法來確定轉換層次結構樹中任意兩個節點之間的轉換(矩陣)。最直接的方法是從開始和目標noded到遍歷頂部時進行右聯合乘法,直到達到共享的祖先節點。然後,將來自起始節點的轉換合成上的反轉目標節點轉換合成值相乘。結果是他們之間的轉換。

現在您可以確定節點之間的轉換,您可以使用該工具在該轉換定義的空間內正確查看操作。

+0

好吧,我的壞,沒有提到。我知道,我手動做所有的數學運算。使用GL 4.0,沒有固定的東西:)你也許錯過了我的問題點。我有一個完美的工作場景圖形系統的常規節點(父母對孩子等)。但相機父母情況我需要它的工作方式稍有不同。所以父輪代表不應該旋轉相機節點,而是圍繞目標圍繞它旋轉。這是AfterEffects中的工作原理。 –

+0

其實從來沒有使用固定管道:P –