【问题标题】:How to Create Model from Scratch如何从头开始创建模型
【发布时间】:2011-12-11 05:22:45
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# model xna terrain generated


    【解决方案1】:

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

    【讨论】:

    • 是的,一种解决方案可以使用低级命令,我不知道我可以使用什么,因为我无法查看任何源代码。这留下了您提到的便利对象,我想了解更多关于它们为什么存在的信息,这将有助于确定我何时应该和不应该使用它们。所有 MSDN 都非常缺乏 Javadoc 的方法等,这与 Java 教程中心不同,后者更有帮助。现在我可以通过使用最后一个命令来获得吗?我还想绘制其他正常加载的模型,我想管理 gfx 设备缓冲区很困难。
    • 不要把低级和困难混为一谈。这实际上很容易做到 - 只需在设备上设置您想要的内容,然后调用 Draw* 方法。 XNA 的 MSDN 文档有点欠缺。但是 App Hub 上的示例和示例非常好 - 所以我建议在有疑问时查看这些示例。通常是经验告诉你什么时候不要使用这些内置的便利类。但是需要创建一个缺少公共构造函数的对象是一个很好的指标。
    猜你喜欢
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 2021-04-12
    • 2021-11-18
    • 2019-12-06
    • 2018-08-04
    相关资源
    最近更新 更多