在C#托管DirectX中制作自定义网格

时间:2009-08-14 20:31:31

标签: c# directx runtime managed mesh

我需要使用C#中的Managed DirectX在运行时制作一个DirectX 3D网格。我无法找到有关如何执行此操作的任何信息。

  1. 不,我不能使用3D建模程序来制作我的对象。它们必须具有精确的尺寸和形状,并且在运行之前我没有任何尺寸或形状信息。
  2. 不,我无法从现有的DirectX网格功能构建模型。 (一个简单的例子:DirectX可以让你通过使用锥形网格和圆柱网格轻松地模拟铅笔。当然,你必须为你的铅笔携带两个网格,而不仅仅是一个,并正确定位和定位每个网格。但是你甚至不能将铅笔的模型纵向分成两半,因为没有提供半圆柱或半圆锥网。)
  3. 在运行时,我已经计算了所有顶点并知道要连接哪些顶点以制作必要的三角形。
  4. 我需要的只是一种纯色。我不需要纹理贴图。
  5. 使用此DirectX调用可以获得球体网格:
    Mesh sphere = Mesh.Sphere(device, sphereRadius, sphereSlices, sphereStacks);
    这个网格是在运行时构建的。

    我需要知道的是如何制作类似的功能:
    Mesh shape = MakeCustomMesh(device, vertexlist, trianglelist);
    两个列表可以是任何合适的容器/格式。

    如果有人能指出我管理的DirectX(C#)示例代码,即使它只是从3个硬编码三角形构建网格,这将是一个很大的好处。

1 个答案:

答案 0 :(得分: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;

然后,适当填写索引和顶点。