我有我認爲是相機一個相當簡單的場景,但我的穴居人大腦拒絕在任何超過兩個維度思考。相機旋轉對齊到任意飛機
我的3D相機需要在物體後面對齊。這個對象可以堅持任何表面,因此攝像機關於「up」的概念可以是任意的矢量。這與這個問題非常相似,但由於我不是直接控制'player'對象,而是試圖使用CreateLookAt,所以我無法理解解決方案:How can I calculate the rotation when using a quaternion camera?
爲了簡化測試,我們假設該對象在一個球體上。
我目前有:
- 目標對象在三維空間中的絕對位置。
- 一個單位矢量,表示對象當前所在表面的法線。在這種情況下,球體上的三角形的法線。
- X和Y角描述攝像機應如何繞軌道運動。
我相信這是所有必需的,但我不知道如何把它放在一起,以一種有效的方式。我知道,我需要通過對象的norMy最好的嘗試改造angle'd相機如下:
Matrix orientation = Matrix.CreateRotationY(OrbitYaw) * Matrix.CreateRotationX(OrbitPitch);
orientation.Up = CurrentNormal;
orientation.Right = Vector3.Cross(orientation.Forward, orientation.Up);
orientation.Right = Vector3.Normalize(orientation.Right);
orientation.Forward = Vector3.Cross(orientation.Up, orientation.Right);
orientation.Forward = Vector3.Normalize(orientation.Forward);
Vector3 Target = ObjectPosition;
Vector3 Position = Vector3.Transform(new Vector3(0,50,0), orientation);
Matrix View = Matrix.CreateLookAt(Position, Target, CurrentNormal);
定位代碼似乎是正確的,但它是很難說,因爲第二個問題組成:當位置改變時,相機看起來會「滾動」。這是有道理的 - 所有相機知道它的位置和在哪裏看,我沒有明確告訴它它應該如何旋轉。這是我需要做的,以便相機在跟蹤對象時保持不變的對齊(除了保持相同相對位置所必需的對齊外)。
球體上的物體是否「直立」?也許你可以使用與球體上的物體相同的旋轉。 – 2013-03-19 13:04:12