2010-03-07 90 views
0

這是我在變換(網格)時不理解的東西。請首先採取(),這是在渲染(功能)看看我的代碼:在活動對象之間切換 - 瞭解變換/視圖

  foreach (GeometricObject obj in this.objects) 
      { 
       if (obj != this.activeObject) 
       { 
        obj.Mesh = MeshUtils.ChangeMeshColor(obj.Mesh, Color.Yellow, device); 
       } 
       else 
       { 
        obj.Mesh = MeshUtils.ChangeMeshColor(obj.Mesh, Color.Green, device); 
        obj.GeometryMatrix.Translate(this.move); 
       } 
       device.Transform.World = obj.GeometryMatrix; 
       obj.Mesh.DrawSubset(0); 
      } 

說明: 我已經得到了一些黃色gometriObjects(網格)和一個綠色的activeObject(我可以在它們之間切換鍵盤1-4)。 'move'是在鍵盤上選擇每個箭頭後更改的矢量(所以我可以移動活動對象)。

但它不工作,因爲我想。 ...如果我改變了其中一個對象的位置......然後在切換到另一個(改變activeObject)之後,我得到了屏幕上的另一個視圖(在所有開關......所有對象都在屏幕;/)。爲什麼這一直是不一樣的觀點?我認爲...它應該,因爲我有相同的觀點設置:

  device.Transform.View = Matrix.LookAtLH(new Vector3(0.0f, 2.0f, -25.0f), // Camera position 
        new Vector3(0.0f, 0.0f, 0.0f), // Look-at point 
        new Vector3(0.0f, 1.0f, 0.0f)); // Up vector 

那麼我的問題是什麼?有任何想法嗎:)? 啊哈...這個問題沒有與那個changingMeshColor函數連接...我檢查了。

+0

我已經讀過幾次,我仍然不知道你的問題是什麼。 AFAICT事實上,你的視圖矩陣永遠不會改變,但你可以改變你的對象位置意味着相機可能沒有看着給定的對象。 – Goz 2010-03-08 23:04:06

回答

0

ECH ....它開始改變後的工作:

obj.GeometryMatrix.Translate(this.move); 

到:

obj.GeometryMatrix *= Matrix.Translation(this.move); 

...但是這是爲什麼?我真的不知道...翻譯()應該改變我的矩陣,沒有設置爲翻譯(因爲它)

+0

在後面的代碼中,您正在通過由「move」定義的轉換矩陣轉換矩陣。在前者中,您正在創建一個翻譯矩陣。前者覆蓋已經在矩陣中的任何東西。 – Goz 2010-03-10 08:38:01