2012-12-29 58 views
2

我不明白什麼是effect.Worldeffect.View等,爲什麼我們把他們的matricies?Mesh.Effects輸入XNA

foreach (ModelMesh mesh in model1.Meshes) 
     { 
      foreach (BasicEffect effect in mesh.Effects) 
      { 
       effect.World = Matrix.CreateWorld(Vector3.Zero, Vector3.Forward, Vector3.Up); 
       effect.View = Matrix.CreateLookAt(Vector3.Zero, Vector3.Zero, Vector3.Up); 
      } 
     } 

回答

2

effect.World不是代表世界的矩陣。它是一個矩陣,表示3D對象(網格,模型)相對於3D遊戲世界的位置和方向。每個物體都會有不同的效果。世界矩陣如果它們的位置不同& /或指向不同。

effect.View是一個矩陣,它表示(以倒置的形式)攝像機相對於同一個3D遊戲世界的方向位置&。大多數情況下,只有一個攝像頭,但可能會有更多(例如,後視鏡將擁有自己的視圖矩陣,而不是主屏幕顯示賽車遊戲擋風玻璃的視圖)。

  1. 模型的頂點很難用來模擬局部空間。
  2. 然後,effect.World將它們轉換爲遊戲世界空間。
  3. 然後effect.View將它們轉換到相機空間。
  4. 然後,效果。投影將它們轉換爲2D屏幕空間和'volia',你的像素着色器知道在哪裏畫什麼。
+0

因此,對於遊戲中的每個模型(假設每個模型放置在不同的位置),我應該創建自己的矩陣,它將重現其位置? –

+0

是的,它的位置和方向(旋轉)用相同的矩陣表示。這個矩陣被傳遞給effect.World。即使放置在相同的位置,爲每個模型提供自己的矩陣也是更好的組織。 –

+0

謝謝!在一個不相關的主題中,什麼是Vector3.Transform,它是如何工作的? –

1

出自MSDN;

BasicEffect.World

獲取或設置世界矩陣。 使用此矩陣更改模型的位置 ,使用世界座標

BasicEffect.View

獲取或設置視圖矩陣。 使用此矩陣更改位置 和相機的方向

我想大膽的線條解釋了它們的不同之處。我還發現了一些有用的文章;

+0

但不應該這個matricies是遊戲本身的一般基礎?我的意思是,任何模型怎麼可能有相機的不同位置和方向?應該只有1個相機和1個世界,不是嗎? –

+0

我不是XNA開發者,但可能有很多相機?爲什麼不同意相機數量? –

+0

你怎麼一次看到多件事? 我還沒有得到這個,你是否適用於每個效果遊戲的世界,視圖和投影,以「告訴」模型他應該在哪裏以及如何表示? 糾正我,如果我錯了,但我們例如移動模型創建每個模型自己的世界矩陣,並創建翻譯到其矩陣?如果是這樣的話,那麼爲什麼我們稱之爲「世界」?如果沒有真正的世界,但是遊戲中的每個模型都有很多世界? –