2013-02-18 56 views
1

因此,對於任務我必須將立方體變形爲球體。所需要做的就是在立方體的表面上放置一堆點(不需要連接或實際位於立方體上,但必須形成一個立方體,儘管連接會讓它更容易看),並且具有他們平滑地轉化成球體形狀。沿立方體表面繪製點

主要問題是我從來沒有學會如何在XNA 4.0中創造點,並且從我所看到的與我們在OpenGL中做的非常不同(我們在前一課中學到了舊的)。

任何人都可以幫助我找出我需要的立方體形狀嗎?每邊都有10x10個點,邊上的點由該邊的表面共享。該結構需要易於複製或修改,因爲我需要有開始狀態,結束狀態和中間狀態來轉換兩個狀態之間的點。

如果我遺漏了任何可能很重要的事情,請告訴我。

回答

0

首先,您應該熟悉the Primitives3D sample。它演示了您需要的所有渲染API。

這是我會怎麼處理這個問題(你可以看一下MSDN上的這些類和方法,並希望能幫助你充實的細節):

  1. 創建的Vector3[]數組,表示適當棋盤格單元立方體(0,0)
  2. 創建第二個數組Vector3[]並使用Vector3.Normalize複製第一個數組的頂點。這將創建一個頂點與原始立方體相匹配的單位球體。
  3. 創建一個VertexPositionColor[]的數組。無論你喜歡填寫顏色數據。
  4. 使用Vector3.Lerp循環前兩個數組,內插每個元素以設置第三個數組中的位置。這給你一個你可以設置動畫的參數 - 你將不得不這樣做每幀(Update可能是最好的)。
  5. 創建一個索引數組(short[]),該數組描述曲面細分的立方體的三角形列表(並依次描述兩者之間的球體和動畫)。
  6. 設置BasicEffect進行渲染。這包括設置其World,ViewProjection矩陣,並可能打開VertexColorEnabled。如果你想要光照,請參閱樣本以獲取詳細信息(您需要使用帶法線的頂點類型,並正確地爲這些法線製作動畫)。
  7. 的方式來呈現與效果是:foreach(EffectPass effectPass in effect.CurrentTechnique.Passes) { effectPass.Apply(); /* your stuff here */ }
  8. 您可以創建一個DynamicVertexBufferIndexBuffer和借鑑這些。但對於這樣簡單的事情,DrawUserIndexedPrimitives要容易得多(here is a recent answer with some detailshere's another one,完整示例爲BasicEffect)。

請注意,您應該只在啓動時創建這些對象(LoadContent是個好地方)。在渲染過程中,您只需使用它們。

如果您在3D渲染時遇到問題,並且正在繪製文本或精靈,請參閱this article以瞭解如何解決此問題。