【问题标题】:monogame obj + mtl loader with textures带有纹理的monogame obj + mtl加载器
【发布时间】:2014-07-19 19:44:02
【问题描述】:

如何在运行时从 MonoGame for Android 项目中的 wavefront .obj (+mtl + textures) 文件加载模型(模型是动态生成的)?是否有开箱即用的解决方案(例如 Content.Load("myobj.obj"))?

【问题讨论】:

  • 您需要将模型转换为 FBX,然后继续使用 XNA 内容编译器进行编译(在 Visual Studio 中创建一个 XNA 项目,将 FBX 添加为内容,构建和从 bin 文件夹中获取 xnb 文件)。在你的 monogame 项目和 Content.Load("myobj"); 中引用这个 xnb;

标签: 3d xna xamarin monogame


【解决方案1】:

第一种简单的方法是在任何模型编辑器中将模型转换为标准 DirectX 格式,并通过内容管道使用它。

如果出于某种原因,您必须动态加载它 - 这比您想象的要容易。虽然您可以 google 并找到预制的 API,例如 http://assimp.sourceforge.net/ ,但只需在记事本或类似的文本编辑器中查看 .obj 文件即可。这是一个(经过大量修剪的)示例:

o Cube
v 1.000000 0.000000 -1.000000
v 1.000000 0.000000 0.000000
v -0.000000 0.000000 -0.000000
v 0.000000 0.000000 -1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
usemtl Material
s off
f 2/1 3/2 4/3

这是一种非常简单的模型格式! o 表示一个新的网格,v 表示一个新的顶点,vt 表示一个纹理坐标,将它们放在一起f 表示一个面,由顶点索引创建。

只要稍加工作和研究,任何人都可以为任何引擎(包括 XNA)组装一个 .obj 加载程序。它是最容易使用的模型格式之一。

【讨论】:

  • 问题是:obj和纹理是由现有代码动态(运行时)生成的。
  • 我上面提到的两种方法都完全兼容运行时读取.obj文件:)
【解决方案2】:

我最近完成了为我的需要编写 obj 格式的内容管道。 我可以共享源代码,但它适用于 XNA 4.0,我不确定它是否适合 MonoGame,因为我从未使用过它。

【讨论】:

    猜你喜欢
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 2013-05-06
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    相关资源
    最近更新 更多