2012-10-26 64 views
1

在OpenGL中,我們可以創建一些多邊形和功能 「pushMatrix()」將它們連接爲一組,然後我們可以旋轉並把它們移動作爲一個對象..如何在xna中移動和旋轉多邊形組?

有沒有辦法做到這一點的XNA?如果我有3個多邊形,並且我想旋轉並將它們作爲一個整體一起移動,那麼我該怎麼做?

編輯: 我使用Primitives形狀來構建一個籃球運動員的骨架。

遊戲將只能是拍出來的遊戲到籃下,這意味着玩家

將只需要移動他的胳膊。

我需要在臂部一個完全控制,爲了做到這一點,我需要移動

這是從原始的形狀Harmonicaly內置了ARM。爲了做到這一點,

我試過執行矩陣變換但

沒有成功實施MatrixStack。任何建議?

回答

2

我會基本回答這個問題,因爲我無法從你的問題中得到很多關於XNA或圖形開發的精通。我甚至不知道你的問題在哪裏。它是代碼,結構還是XNA與OpenGL相比的工作原理?

簡短的答案是,有沒有內置矩陣堆棧。

與矩陣的工作,當你在OpenGL和XNA/DX做的是同樣的事情。爲了方便起見,使用pushMatrix所做的實際上只是保留堆棧上的矩陣(轉換)狀態。

將對象作爲一個組連接僅僅是語義上的,你並沒有真正將它們連成一個組。你正在做的是設置一個渲染狀態,GPU使用它渲染每個繪製調用的頂點,直到該狀態再次被改變。這可以在XNA/DX中以與OpenGL相同的方式完成。

根據您使用的繪製對象的方式,應用轉換的方式有多種。從你的描述中,我猜你正在GraphicsDevice對象上使用DrawPrimitives(或類似的東西),但無論你使用什麼,它都會使用以前應用的任何轉換,通常在Effect上。其中最簡單的是BasicEffect,它有三個成員你有興趣

  • 世界
  • 查看
  • 投影

如果你使用BasicEffect,你只是你的應用使用世界成員中的矩陣進行轉換。在將變換應用到當前效果之後繪製的任何內容都將使用這些變換。如果您使用的是自定義效果,除非您如何設置矩陣效果(使用參數集合),否則您可以執行某些操作。看一看:

如果你是之後是一個實際的變換堆棧,你必須實現一個自己,雖然這是很簡單的。類似這樣的:

Stack<Matrix> matrixStack = new Stack<Matrix>(); 
... 
matrixStack.Push(armMatrix); 
... 
basicEffect.World = matrixStack.Peek(); 
foreach (EffectPass pass in basicEffect.CurrentTechnique.Passes) 
{ 
    pass.Apply(); 

    graphics.GraphicsDevice.DrawPrimitives(...); 
} 
basicEffect.End(); 
... 
matrixStack.Pop();