【发布时间】:2018-06-29 08:36:18
【问题描述】:
可以在 Xcode SceneKit 编辑器中打开下面的 OBJ 文件并更改材质颜色。
但是,文档并不清楚如何从代码中访问相同的材料列表,并以编程方式更改颜色。 (见附件)
func enumerateChildObjects(of: AnyClass, root: MDLObject, using: (MDLObject, UnsafeMutablePointer<ObjCBool>) -> Void, stopPointer: UnsafeMutablePointer<ObjCBool>) 似乎可能会有所帮助,但它不会返回相同的材料列表。
将 OBJ 文件加载到 SceneKit 的代码:
let modelPath = "model.obj"
let url = NSURL(string: modelPath)
let scene = SCNScene(named: modelPath)!
sceneView.autoenablesDefaultLighting = true
sceneView.allowsCameraControl = true
sceneView.scene = scene
sceneView.backgroundColor = UIColor.white
右侧材质列表(Xcode截图):
下载OBJ文件(点击Download链接):https://poly.google.com/view/cKryD9VnDEZ
【问题讨论】:
-
您可以使用 enumerateChildObjects 因为节点是引用类型,所以你不要。需要它作为回报。如果您更改 node.firstMaterial.diffuse.content = UIColor.red 会有所帮助。您也可以打印 node.name 以便识别节点
-
我没有亲自尝试,而是在 xcode 中选择 .obj 文件转到编辑器菜单,并且可能有将其转换为 .scn 文件的选项