2009-08-14 10 views
1

実行時にのDirectX 3DメッシュをC#のManaged DirectXを使用して作成する必要があります。私はこれを行う方法に関する情報を見つけることができませんでした。C#でカスタムメッシュを作成するDirectX

  1. いいえ、3Dモデラープログラムを使用してオブジェクトを作成することはできません。それらは正確なサイズと形状にする必要があり、実行時までサイズや形状の情報はありません。
  2. いいえ、私は既存のDirectXメッシュ機能からモデルを構築できません。 (単純な例:DirectXでは、円錐メッシュと円柱メッシュを使って鉛筆を簡単にモデル化できます。もちろん、鉛筆の代わりに2つのメッシュを持ち運ぶ必要があります。半円筒や半円錐メッシュがないので縦に半分に鉛筆のモデルを作ることさえできません)。
  3. 実行時に、私はすべての頂点を計算しており、必要なもの三角形。
  4. 私が必要とするのは単色です。テクスチャマップは必要ありません。
    Mesh sphere = Mesh.Sphere(device, sphereRadius, sphereSlices, sphereStacks);
    このメッシュは、実行時に構築されています:

一つは、このDirectXのコールを使用して、球のメッシュを取得することができます。二つのリストは、任意の適切な容器/フォーマット可能性があり
Mesh shape = MakeCustomMesh(device, vertexlist, trianglelist);
:私が知る必要がある何

は、同様の機能を作成する方法です。

DirectX(C#)のマネージドサンプルコードを誰かが指し示すことができれば、3つのハードコーディングされた三角形からメッシュを作成するだけでも大きなメリットがあります。

+0

Reedに必要なジャンプスタートに感謝します。 私の質問を編集してくれたJeffにも感謝します。私は2つの異なる方法で2度間違った「管理」をしていたとは思えません。明らかに金曜日に遅かった。 –

答えて

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

関連する問題