UrhoSharp将3D引入各种平台,并使用其自己的二进制mdl格式的模型文件。 3D模型有很多来源,包括和,以及FBX,OBJ,DAE和BLEND等格式。 Urho3D提供了AssetImporter和Urho3D Blender加载项等工具,您可以使用这些模型。 在这篇文章中,我们将更仔细地查看这些工具,并解释如何轻松将它们整合到应用程序中。

使用Urho3D Blender加载项导入3D资产

由于我们正在构建一个ARKit应用程序,并且室内设计是AR的一个合适的用例,我为这个例子找到了一个家具模型。

注意*本文假设了3D建模软件Blender的一些知识。 如果您不熟悉此工具,并且想要一个底稿,请查看。

  • 首先,。
  • 然后,将导入Blender。 (这可以通过文件 - >导入fbx菜单轻松完成。)
  • 现在,通过从模型中烹饪Urho预制,将您的模型导出到Urho。 (一组预配置的节点,模型和材料。)

为此,请在“属性”面板中找到Urho3D导出器配置面板:

要导出预制,请选择以下选项:

  1. 选择要通过“输出”文件夹进行保存的位置。
  2. 对象 - 全部。 要在大纲视图中选择特定对象,请选择仅选择。
  3. 导出几何,材质和纹理。
  4. 出口Urho Prefabs并检查一个集体。
  5. 可选地,要与对象交互,请添加物理(碰撞形状,刚体)。

单击魔术导出按钮并转到输出目录,如下所示:

我们的预制包括几个文件夹和文件:

  1. Materials: 告诉着色器使用纹理,技术和参数。
  2. Models: 表示3D几何的自定义二进制文件。
  3. Objects: 描述我们的预制作为一组节点,变换,模型和材料的XML文件。
  4. Textures: 漫射地图,普通地图,镜面地图等

使用AssetImporter导入3D资产

与Urho3D Blender加载项不同,AssetImporter是一个命令行界面(CLI)工具(基于Assimp)。 您可以在中找到可执行文件。 为了将FBX文件转换为预制,只需使用以下参数执行:

AssetImporter.exe node file.fbx prefab.xml

要快速查看结果,还有一个可以上找到的AssetImporter CLI上的一个小型WPF / Cocoa应用程序。 现在,只需将这些文件添加到您的项目中并设置正确的Build Action; 对于iOS它是BundleResource:

定义场景

定义场景的最简单方法是将SimpleApplication子类化,其中包含一个预配置的场景,其中包含灯光,摄像头和其他您不需要创建自己的组件。

Scene.InstantiateXml will create a copy of the prefab defined in the assets with a given position, i.e. one meter away, one meter down.将创建一个具有给定位置的资产中定义的预制的副本,即距离一米的距离。

启动此场景

只需在iOS应用程序的布局中添加一个UrhoSurface(UIPanel)。 作为根视图,例如:

点击(此处)折叠或打开

  1. var surface = new UrhoSurface(UIScreen.MainScreen.Bounds);
  2. Window.RootViewController.View.AddSubview(surface);
  3. Window.MakeKeyAndVisible();
  4. surface.Show(new ApplicationOptions {
  5.     ResourcePaths = new [] { "BookshelfData"}
  6. });


这也显示了如何轻松地将Urho嵌入任何现有的UIKIt应用程序作为(子)视图。

将其全部与ARKit结合

为了显示由ARKit提供的增强现实中的模型:

  1. 添加ARKit特定资产(如YCbCr着色器等)。
  2. 然后添加基本的Arkit应用程序类,在使用ARKit与UrhoSharp指南中描述。
  3. 并对ArkitApp类进行子类化,而不是SimpleApplication。
  4. 运行!

Bookshelf showing with ARKit

ArkitApp将在不久的将来提供UrhoSharp NuGet软件包,并且还将支持Google ARCore,因此您还可以在Android设备上玩UrhoSharp和AR。 最终的演示将在GitHub上公布! 由于许可证不包括资产。

如果您想了解有关UrhoSharp的更多信息,请务必访问Xamarin开发人员中心的文档