14

我可以使用 COLLADA/.dae 格式导出在 Blender 中创建的网格以在 SceneKit 中使用 - 但是在 iOS 设备上没有显示纹理。

此外,OS X 上的预览不会打开从 Blender 导出的任何 COLLADA 文件 - 但侧边栏预览确实显示了网格。出口需要哪些选项才能完成这项工作?

4

3 回答 3

26

首先创建一个 scnassets 文件夹(不是必需的,但很有用)

  1. 在您的桌面上创建一个文件夹并将其扩展名为“.scnassets”

  2. 将您的 collada(.dae) 文件与您将在其中使用的任何纹理一起放入。

  3. 将文件夹拖到您的项目中并像往常一样另存为副本。

  4. 单击您的 scnassets 文件夹,您将看到一个复选框(如果未选中),用于转换为“y”上轴。

为场景模型分配纹理

  1. 在 xcode 中单击项目中的 collada(.dae) 文件。

  2. 您应该会看到您的场景,并在其左侧列出相机、灯光、材质等。这是您的场景树。

  3. 打开材料选项卡,然后单击其中一种材料。

  4. 在检查窗口的右侧,单击蓝色球形图标(材料检查器)以查看该材料的漫反射、镜面反射等。

  5. 单击漫反射选项卡,当它打开时,您应该可以在项目中选择颜色和纹理。在 3d 程序中选择您在模型上使用的纹理。只要您在 3D 程序中正确地对它们进行 UV 解包,它们就应该立即应用到您的场景视图中。

如果我想在加载场景后更改材质怎么办?很高兴你问!

为此,我们必须使用 SCNSceneSource 类的 entryWithIdentifier 方法。我将在这里使用 swift 因为它太棒了!开始了...

  1. 像这样获取场景(.dae)的网址......

    let url = NSBundle.mainBundle().URLForResource("YourFolder.scnassets/yourScene", withExtension "dae")
    
  2. 现在让我们使用该网址...

    let source = SCNSceneSource(URL: url, options: nil)
    
  3. 单击您的 .dae 并在场景图形下是项目列表,其中之一是您的几何体。它的右侧将有一个三通水壶,表示如此。我们将在这里使用它的名字。假设您的几何图形名称是 Geo。像这样使用它...

    let yourGeometry = source.entryWithIdentifier("Geo", withClass: SCNGeometry.self) as SCNGeometry
    
  4. 现在我们有一个附加到名为 yourGeomerty 的 SCNNode 的源。让我们用这样的 UIColor 创建一个新材质...

    let newMaterial = SCNMaterial()
    newMaterial.diffuse.contents = UIColor.redColor()
    
  5. 最后,我们将像这样用 newMaterial 切换旧材料......

    yourGeometry.geometry.replaceMaterialAtIndex(0, withMaterial: newMaterial)
    

如果您有不止一种材料,请使用它和其他索引。您还可以使用 UIImage 类来使用另一个纹理而不是颜色。

提示 如果您想在 scnassets 文件夹中添加或删除某些内容,请导航到您的项目文件夹,而不是 xcode。我花了一段时间才弄清楚,所以我想我会为大家省去麻烦。

于 2014-08-04T17:48:33.337 回答
4

为了让它发挥作用,我必须做 3 件事。

  1. 确保图像打包在 .blend 文件中(这是 UV 编辑器中的一个选项)

  2. 导出时,文件不会自动包含 uv 或材质。有一个复选框可以在 DAE 中包含 UV 和材质。我在做的时候也错过了这个。

  3. 这个只有当你放在操场上时才需要。dae 并没有完全应用,但我能够在开发人员工具中使用他们的 scntool 来导出一个 dae。这是我使用的示例命令行。

./scntool --convert ~/Documents/Art/BlenderArt/tableandappleUV.dae --format c3d --output ~/Documents/Table5.dae

注意 c3d 格式。使用它,您的游乐场现在也可以识别 dae。(另一个注意事项:如果你想在操场上使用 dae,你需要放在操场的资源文件夹中)

于 2014-11-10T20:06:35.330 回答
4

Collada 文件不嵌入纹理,它们只有对它们的引用。确保在预览中打开 collada 文件时可以访问您的纹理,并确保在构建应用程序时将纹理包含在应用程序包中。

于 2014-07-30T08:44:11.810 回答