2010-08-22 150 views
3

得到的Vector3我想我明白矩陣數學不夠好,但顯然我無言以對XNA:從矩陣

這裏的設置:

我在世界上[0,0,0]對象空間。我有一個由鼠標移動控制的相機類,可以在物體周圍旋轉和縮放,以便它始終看着它。這是我如何計算我viewMatrix從相機:

public Matrix viewMatrix { 
    get { 
     return 
      Matrix.CreateFromAxisAngle(Vector3.Up, rotAngle) 
       * Matrix.CreateFromAxisAngle(Vector3.Left, pitchAngle) 
       * Matrix.CreateTranslation(0, 0, distance) 
     ; 
    } 
} 

我需要能夠讓相機在世界空間中的位置,所以我可以從包裝盒的距離 - 從每個面特別是它的距離的盒子。 如何獲得相機在世界空間座標系中的xyz位置?

我已經試過:

// all of these only return [0, 0, distance]; 
Vector3 pos = Vector3.Transform(Vector3.Zero, viewMatrix); 
Vector3 pos = viewMatrix.Translation; 
Vector3 pos = new Vector3(viewMatrix.M41, viewMatrix.M42, viewMatrix.M43); 

好像旋轉信息被莫名其妙地丟失。奇怪的是,viewMatrix代碼完美地適用於定位相機!

回答

7

或稍微簡化:

的Vector3 POS = Matrix.Invert(視圖).Translation;

2

我再次找出問題張貼問題秒鐘內:

我需要反轉視圖矩陣。旋轉信息丟失,因爲它在距離計算中不起作用,直到視圖矩陣被反轉。輪換在轉變的錯誤「結束」。

Vector3 pos = Vector3.Transform(Vector3.Zero, Matrix.Invert(viewMatrix));