3d 单博弈对象&x2B;带纹理的mtl加载程序

3d 单博弈对象&x2B;带纹理的mtl加载程序,3d,xna,xamarin,monogame,3d,Xna,Xamarin,Monogame,如何在运行时从MonoGame for Android项目中的wavefront.obj(+mtl+纹理)文件加载模型(模型是动态生成的)?是否有现成的解决方案(如Content.Load(“myobj.obj”)?第一种简单的方法是在任何模型编辑器中将模型转换为标准DirectX格式,并通过内容管道使用 如果,无论出于什么原因,您必须动态加载它-这比您想象的要容易。虽然你可以在谷歌上搜索并找到一个预先制作的API,比如,只需查看记事本或类似文本编辑器中的.obj文件。以下是一个(严重修剪的)示

如何在运行时从MonoGame for Android项目中的wavefront.obj(+mtl+纹理)文件加载模型(模型是动态生成的)?是否有现成的解决方案(如Content.Load(“myobj.obj”)?

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

如果,无论出于什么原因,您必须动态加载它-这比您想象的要容易。虽然你可以在谷歌上搜索并找到一个预先制作的API,比如,只需查看记事本或类似文本编辑器中的
.obj
文件。以下是一个(严重修剪的)示例:

这是一个非常简单的模型格式
o
表示一个新网格,
v
表示一个新顶点,
vt
表示一个纹理坐标,将其放在一起
f
表示一个面,该面是根据顶点索引创建的


只要稍加努力和研究,任何人都可以为任何发动机(包括XNA)组装一个
.obj
装载机。这是最容易使用的模型格式之一。

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

您需要将模型转换为FBX,然后使用XNA内容编译器继续编译它(在Visual Studio中创建XNA项目,将FBX添加为内容,构建并从bin文件夹中获取xnb文件)。在monogame项目和内容中引用此xnb。加载(“myobj”);问题是:obj和纹理正在动态生成(运行时)我上面提到的两种方法都与运行时读取.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