2009-08-14 32 views
1

我需要在運行時使用C#託管的DirectX在運行時製作DirectX 3D網格。我一直無法找到關於如何做到這一點的任何信息。在C#中製作自定義網格託管DirectX

  1. 不,我不能使用3D建模程序來製作我的對象。它們的尺寸和形狀必須精確,並且在運行前我沒有任何尺寸或形狀信息。
  2. 不,我不能從現有的DirectX網格功能建立模型。 (一個簡單的例子:DirectX可以讓你使用錐形網格和圓柱形網格來輕鬆地建模一個鉛筆,當然,你必須爲你的鉛筆提供兩個網格,而不僅僅是一個,並且正確定位和定位每個網格。由於沒有提供半圓柱體和半圓錐體網格,所以甚至不能製作將鉛筆分割成縱向的模型)。
  3. 在運行時,我已經計算了所有的頂點並知道要連接哪些頂點以實現必要三角形。
  4. 我需要的只是一種純色。我不需要紋理貼圖。

人們可以得到使用此的DirectX調用球的網格:
Mesh sphere = Mesh.Sphere(device, sphereRadius, sphereSlices, sphereStacks);
該網在運行時生成。

我需要知道的是如何使類似的功能:
Mesh shape = MakeCustomMesh(device, vertexlist, trianglelist);
其中兩個列表可以是任何合適的容器/格式。

如果任何人都可以指向託管的DirectX(C#)示例代碼,即使它只是從3個硬編碼三角形構建網格,這將是一個很大的好處。

+0

非常感謝里德獲得必要的快速啓動。 也感謝Jeff編輯我的問題。我不能完全相信我用兩種不同的方式拼寫了「被管理」的錯誤兩次。星期五顯然很晚。 – 2009-08-16 21:46:20

回答

6

有一些示例代碼顯示如何在MDXInfo上執行此操作。這將創建一個包含多個子集的網格 - 如果您不需要這個網格,則更容易。

基本上,你只需要創建一個網格:

Mesh mesh = new Mesh(numIndices, numVerticess, MeshFlags.Managed, CustomVertex.PositionColored.Format /* you'll need to set this */ , device); 

然後,你可以抓住網格頂點緩衝和索引緩衝,並覆蓋它,使用:

IndexBuffer indices = mesh.IndexBuffer; 
VertexBuffer vertices = mesh.VertexBuffer; 

然後,填寫索引和頂點適當。

+0

我剛剛創建了一個以您的示例爲主的網格,但是當我使用'ToXFile'方法導出它時,它失敗了,我認爲應該爲動態創建的網格提供額外信息,以便它可以保存爲x文件,可以你對此有所瞭解?謝謝。 – zionpi 2014-07-01 07:38:04