为了让一些现有的模型可以使用,这就是我所做的......只是我所知道的基础知识。
- 我去了Turbosquid,找到了一个适合我的 3D 模型。
- 确保它有 OBJ 文件。购买和下载。
- 下次下载Blender。导入刚购买的 OBJ 文件。
- 导出 DAE 文件。
- 将 DAE 文件和任何纹理(png 文件)拖到项目中的 .scnassets 文件夹中。
- 单击 .scnassets 文件夹中的 DAE 模型。单击以选择场景图中的对象。
- 单击右上角的地球仪。
- 我单击了漫反射并选择了我拖入的一个 PNG 以将其应用于模型
您也可以跳过 Blender 转换,只需使用免费的在线 OBJ 到 DAE 转换工具之一。去谷歌上查询。并尝试在 Turbosquid 上购买一个便宜的 5 美元范围的模型,它只有一个 OBJ 文件,没有很多其他零件。它们太大了,无论如何作为入门方法都会产生其他问题。
更新 在观看了有关 Xcode 中 Model IO 的 Apple WWDC 演示后,我现在看到您可以将 OBJ 文件放入您的 .scnassets 文件夹中。选择该文件,转到编辑器并选择转换为 SCN 文件。这也应该有效,但我没有尝试过。值得尝试使用您的 OBJ 文件的副本。
2018 年 12 月更新:
我一直在更多地处理 3D 文件。以下是有关此问题的一些增量帮助。
尝试使用 MeshLab 导入您的 3D 模型并将其转换为 .DAE 文件。将 .DAE 文件拖到 Xcode 中的文件夹中。这就是您要在应用程序中显示的内容。
- http://www.meshlab.net/
如果您的源 3D 模型是 .OBJ 文件,则有两个相关文件应与 .OBJ 文件位于同一文件夹中。它们是 *.mtl 文件和 *.jpg 或 *.BMP 文件。 .mtl 文件可以用 TextEdit 打开。
打开并确保它有一行写着:map_Kd *.jpg。 .jpg 是环绕 3D 网格文件的纹理图像。我发现最好确保您的纹理文件是 .jpg 格式。如果不是,请将其更改为 .jpg 格式(例如在预览中,将其重新保存为 jpeg),然后编辑 .mtl 文件以获取新的 .jpg 文件名。
我有一些 .bmp 的纹理文件,我刚刚转换为 .jpg,编辑了 .mtl 文件,结果很好。
第二个问题是 .obj 文件中节点的名称。 .obj 文件也可以用 TextEdit 打开。 .obj 文件应引用同一文件夹中的 .mtl 文件。如果没有,你就有问题了。
这是棘手的部分。当您在 SceneKit 场景中将 childNode 添加到 rootNode 时,您必须填写“withName:”文本名称。打开您从 .obj + .jpg + .mtl 制作的转换后的 .DAE 文件(导入 MeshLab 时会使用这三个文件,但导出到 .DAE 后,只有 .DAE 文件),然后搜索“node编号 = 。它可能会说:“node id="node”。如果是这样,那么单词“node”就是您在 scene.rootNode.childNode(withName:" 的“withName:”属性中为文本名称输入的 childNode 的名称节点”,递归:true) 调用。
如果还没有,您可以将节点名称 ID 更改为 node。
希望这会有所帮助。许多小时的工作和其他人的帮助来理解下一轮使用 3D 模型的工作。