我可以使用 COLLADA/.dae 格式导出在 Blender 中创建的网格以在 SceneKit 中使用 - 但是在 iOS 设备上没有显示纹理。
此外,OS X 上的预览不会打开从 Blender 导出的任何 COLLADA 文件 - 但侧边栏预览确实显示了网格。出口需要哪些选项才能完成这项工作?
首先创建一个 scnassets 文件夹(不是必需的,但很有用)
在您的桌面上创建一个文件夹并将其扩展名为“.scnassets”
将您的 collada(.dae) 文件与您将在其中使用的任何纹理一起放入。
将文件夹拖到您的项目中并像往常一样另存为副本。
单击您的 scnassets 文件夹,您将看到一个复选框(如果未选中),用于转换为“y”上轴。
为场景模型分配纹理
在 xcode 中单击项目中的 collada(.dae) 文件。
您应该会看到您的场景,并在其左侧列出相机、灯光、材质等。这是您的场景树。
打开材料选项卡,然后单击其中一种材料。
在检查窗口的右侧,单击蓝色球形图标(材料检查器)以查看该材料的漫反射、镜面反射等。
单击漫反射选项卡,当它打开时,您应该可以在项目中选择颜色和纹理。在 3d 程序中选择您在模型上使用的纹理。只要您在 3D 程序中正确地对它们进行 UV 解包,它们就应该立即应用到您的场景视图中。
如果我想在加载场景后更改材质怎么办?很高兴你问!
为此,我们必须使用 SCNSceneSource 类的 entryWithIdentifier 方法。我将在这里使用 swift 因为它太棒了!开始了...
像这样获取场景(.dae)的网址......
let url = NSBundle.mainBundle().URLForResource("YourFolder.scnassets/yourScene", withExtension "dae")
现在让我们使用该网址...
let source = SCNSceneSource(URL: url, options: nil)
单击您的 .dae 并在场景图形下是项目列表,其中之一是您的几何体。它的右侧将有一个三通水壶,表示如此。我们将在这里使用它的名字。假设您的几何图形名称是 Geo。像这样使用它...
let yourGeometry = source.entryWithIdentifier("Geo", withClass: SCNGeometry.self) as SCNGeometry
现在我们有一个附加到名为 yourGeomerty 的 SCNNode 的源。让我们用这样的 UIColor 创建一个新材质...
let newMaterial = SCNMaterial()
newMaterial.diffuse.contents = UIColor.redColor()
最后,我们将像这样用 newMaterial 切换旧材料......
yourGeometry.geometry.replaceMaterialAtIndex(0, withMaterial: newMaterial)
如果您有不止一种材料,请使用它和其他索引。您还可以使用 UIImage 类来使用另一个纹理而不是颜色。
提示 如果您想在 scnassets 文件夹中添加或删除某些内容,请导航到您的项目文件夹,而不是 xcode。我花了一段时间才弄清楚,所以我想我会为大家省去麻烦。
为了让它发挥作用,我必须做 3 件事。
确保图像打包在 .blend 文件中(这是 UV 编辑器中的一个选项)
导出时,文件不会自动包含 uv 或材质。有一个复选框可以在 DAE 中包含 UV 和材质。我在做的时候也错过了这个。
这个只有当你放在操场上时才需要。dae 并没有完全应用,但我能够在开发人员工具中使用他们的 scntool 来导出一个 dae。这是我使用的示例命令行。
./scntool --convert ~/Documents/Art/BlenderArt/tableandappleUV.dae --format c3d --output ~/Documents/Table5.dae
注意 c3d 格式。使用它,您的游乐场现在也可以识别 dae。(另一个注意事项:如果你想在操场上使用 dae,你需要放在操场的资源文件夹中)
Collada 文件不嵌入纹理,它们只有对它们的引用。确保在预览中打开 collada 文件时可以访问您的纹理,并确保在构建应用程序时将纹理包含在应用程序包中。