如何以编程方式将 material 分配给 3D SCNNode?

How to programmatically assign a material to a 3D SCNNode?

我正在尝试弄清楚如何以编程方式将 material 分配给 ARKit 场景中的某个对象 (SCNNode) (XCode 9 / Swift 4)。我正在尝试以编程方式执行此操作,因为我希望使用太多变体(或用户生成的图像)​​来渲染相同形状的对象,从而无法通过场景中的菜单分配来完成此操作。该对象只是一个立方体 - 现在,我只是想让一侧显示这个从 Assets 文件夹中提取的 material。

这是我尝试引用之前 Stack 帖子的当前代码,但该对象只是保持白色。

let material = SCNMaterial()
material.diffuse.contents = UIImage(named: "texture.jpg")

let nodeObject = self.lastUsedObject?.childNode(withName: "box", recursively: true)
// I believed this lets me grab the last thing I rendered in an ARKit scene - please
// correct me if I'm wrong.  My object is also labeled "box".
nodeObject?.geometry?.materials
nodeObject?.geometry?.materials[0] = material // I wanted to grab the first face of the box

在此先感谢您!我已经摆弄了一段时间,但我似乎无法掌握 Swift.

中 3D 对象/场景的编程方法

总的来说,我正在像这样设置一个物体的材质并且它工作正常(只抓取盒子的一个面

var imageMaterial = SCNMaterial()
imageMaterial.isDoubleSided = false
imageMaterial.diffuse.contents = UIImage(named: "myImage")
var cube: SCNGeometry? = SCNBox(width: 1.0, height: 1.0, length: 1, chamferRadius: 0)
var node = SCNNode(geometry: cube)
node.geometry?.materials = [imageMaterial]

所以可能是你没能抓到物体,如评论中所述。