【问题标题】:Making a custom mesh in C# managed DirectX在 C# 托管 DirectX 中制作自定义网格
【发布时间】:2009-08-14 20:31:31
【问题描述】:

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

  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 个硬编码三角形构建网格,那将是一个很大的好处。

【问题讨论】:

  • 感谢 Reed 提供必要的快速启动。还要感谢 Jeff 编辑我的问题。我不敢相信我以两种不同的方式两次拼错了“管理”。显然是周五晚了。

标签: c# directx runtime managed mesh


【解决方案1】:

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;

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

【讨论】:

  • 我刚刚创建了一个以您的示例为首的网格,但是当我使用ToXFile 方法导出它时,它失败了,我认为应该向动态创建的网格提供额外的信息,以便它可以保存为 x 文件,你能解释一下吗?谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-22
  • 1970-01-01
  • 2010-12-18
  • 2019-01-17
  • 1970-01-01
相关资源
最近更新 更多