1

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

  1. いいえ、3Dモデラープログラムを使用してオブジェクトを作成することはできません。それらは正確なサイズと形状である必要があり、実行時までサイズや形状の情報はありません。
  2. いいえ、既存のDirectXメッシュ機能からモデルを構築することはできません。(簡単な例:DirectXを使用すると、コーンメッシュとシリンダーメッシュを使用して鉛筆を簡単にモデル化できます。もちろん、鉛筆には1つだけでなく、2つのメッシュを持ち運び、それぞれを適切に配置および方向付ける必要があります。半円柱も半円錐メッシュも提供されていないため、鉛筆のモデルを縦に半分に分割することさえできません。)
  3. 実行時に、すべての頂点がすでに計算されており、必要な三角形を作成するために接続する頂点がわかっています。
  4. 必要なのは無地だけです。テクスチャマップを作成する必要はありません。

このDirectX呼び出しを使用して、球のメッシュを取得でき
Mesh sphere = Mesh.Sphere(device, sphereRadius, sphereSlices, sphereStacks);
ます。このメッシュは実行時に作成されます。

私が知る必要があるのは、同様の関数を作成する方法です
Mesh shape = MakeCustomMesh(device, vertexlist, trianglelist);
。2つのリストは、任意の適切なコンテナー/形式である可能性があります。

誰かが私にマネージドDirectX(C#)サンプルコードを教えてくれれば、ハードコードされた3つの三角形からメッシュを構築するだけでも、それは大きなメリットになります。

4

1 に答える 1

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;

次に、インデックスと頂点を適切に入力します。

于 2009-08-14T20:38:34.877 に答える