1

我正在为我们的项目生成地形,这些东西将包含在我可以绘制的模型类中,但是我的新类会很好,因为我可能需要经常在里面查看特定数据,然后我只需要与 Game 类一起使用的基本功能。无论如何,我对 XNA 框架有相当多的了解,但由于它处理任何事情的复杂程度。所以我的问题是我不能只制作一个模型,我不能实例化那个类或任何东西。我有我认为合适的数据来形成模型的几何形状,这就是我现在所需要的,以后可能会对其进行纹理处理。我不知道从这里去哪里。

XNA,您通常使用 Content.Load,将其内容管道读取到文件中并专门对其进行解析,但我想避免这种情况,因为我希望生成我的地形。我可以为要构成网格的三角形计算顶点数据和索引数组,但到目前为止,我的努力试图实例化任何对象,例如 Model 或其包含的对象,但都失败了。如果有一些工厂类我可以用来构建它,我不知道那是什么,所以如果其他人可以在那里指出我正确的方向并给我一个关于如何构建模型的粗略大纲,那将有所帮助。如果这不是答案,也许我需要做一些完全不同的事情,无论是否以使用 Content.Load 为中心,但基本上我不希望我的地形位于文件中,在执行之间保持一致,我想控制网格数据加载并随机化它,

那么我怎样才能让一个完全以编程方式生成的模型显示在屏幕上,并且仍然暴露它的数据呢?

4

1 回答 1

4

Model及其相关的类(例如:)ModelMesh是便利类。它们不是绘制模型的唯一方法。预计有时,特别是在做一些“特殊”的事情时,您将不得不使用与使用相同的低级方法完全重新实现它们Model

这是您应该做的快速版本:

首先,在加载时,创建一个VertexBuffer和一个IndexBufferSetData在每个上使用以用适当的数据填充每个。

然后,在绘制时,执行以下操作:

GraphicsDevice.SetVertexBuffer(myVertexBuffer);
GraphicsDevice.Indices = myIndexBuffer;

// Set up your effect. Use a BasicEffect here, if you don't have something else.
myEffect.CurrentTechnique.Passes[0].Apply();

GraphicsDevice.Textures[0] = myTexture; // From Content.Load<Texture2D>("...")

GraphicsDevice.DrawIndexedPrimitives(...);
于 2011-12-11T07:00:08.033 回答