我可以使用COLLADA / .dae格式导出在Blender中创建的网格,以便在SceneKit中使用 - 但iOS设备上不会显示任何纹理。
此外,在OS X上预览不会打开从Blender导出的任何COLLADA文件 - 但侧边栏预览会显示网格。出口使这项工作需要哪些选项?
答案 0 :(得分:24)
首先创建一个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。我花了一段时间才弄清楚这么想我会救每个人的麻烦。
答案 1 :(得分:4)
Collada文件不嵌入纹理,它们只引用它们。当您在预览中打开它时,请确保您的纹理可以从collada文件中访问,并确保在构建应用程序时在应用程序包中包含纹理。
答案 2 :(得分:4)
我必须做的三件事才能让它发挥作用。
确保图像打包在.blend文件中(这是UV编辑器中的一个选项)
导出时,文件不会自动包含uv或材料。有一个复选框,可以在DAE中包含UV和材质。在做这件事时我也错过了。
如果你放在游乐场,你只需要这个。该dae并不适用,但我能够在开发人员工具中使用他们的scntool来导出dae。这是我使用的示例命令行。
./ scntool --convert~ / Documents / Art / BlenderArt / tableandappleUV.dae --format c3d --output~ / Documents / Table5.dae
注意c3d格式。使用它,你的游乐场现在也可以识别dae。 (另一个注意事项:如果你想在操场上使用dae,你需要放入游乐场的资源文件夹)