如何从头开始创建模型

时间:2011-12-11 05:22:46

标签: c# model xna terrain generated

我正在为我们的项目生成地形,这些东西将包含在我可以绘制的Model类中,但是我的新类也没问题,因为我可能需要经常查看特定数据,然后我会只需要基本功能来使用Game类。 无论如何,我对XNA框架有相当多的了解,但是因为它处理任何事情都有些复杂。所以我的问题是我不能只做一个模型,我无法实例化那个类或任何东西。我有我认为形成模型几何的正确数据,这是我现在所需要的,后来可能有纹理。 我不知道从哪里开始。

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

那么如何才能完全以编程方式生成模型,显示在屏幕上,并且仍然显示其数据?

1 个答案:

答案 0 :(得分:4)

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

以下是您应该做的快速版本:

首先,在加载时,创建一个VertexBuffer和一个IndexBuffer并在每个上使用SetData来填充每个相应的数据。

然后,在抽奖时,执行以下操作:

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(...);