我可以使用COLLADA/.dae格式导出在Blender中创建的网格以供在SceneKit中使用,但是iOS设备上没有纹理显示。
此外,在OS X上,预览无法打开从Blender导出的任何COLLADA文件 - 但是侧边栏预览确实显示了网格。导出时需要哪些选项才能使其正常工作?
我可以使用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) 的 URL,如下所示...
let url = NSBundle.mainBundle().URLForResource("YourFolder.scnassets/yourScene", withExtension "dae")
现在让我们利用这个URL...
let source = SCNSceneSource(URL: url, options: nil)
点击你的.dae文件,在场景图下面是一个项目列表,其中之一就是你的几何形状。它右边会有一个茶壶标识。我们将在此处使用它的名称。假设你的几何形状名为Geo。像这样使用它...
let yourGeometry = source.entryWithIdentifier("Geo", withClass: SCNGeometry.self) as SCNGeometry
现在我们已经将一个名为yourGeometry的SCNNode连接到了一个源上。让我们创建一个新的材质,使用UIColor来实现...
let newMaterial = SCNMaterial()
newMaterial.diffuse.contents = UIColor.redColor()
最后我们将以这样的方式更换旧材料为新材料...
yourGeometry.geometry.replaceMaterialAtIndex(0, withMaterial: newMaterial)
如果您有多种材料,可以尝试使用其他索引来进行操作。您还可以使用UIImage类来使用另一种纹理而不是颜色。
提示 如果您想要添加或删除scnassets文件夹中的内容,请导航到您的项目文件夹中进行操作,而不是在Xcode中操作。这花了我一段时间才弄明白,所以我想节省大家的麻烦。
使它工作的三件事。
确保图像已打包在.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文件中访问,并在构建应用程序时确保将纹理包含在应用程序包中。