我试图弄清楚如何以编程方式将材质指定给我的场景中的某个对象(SCNNode)以用于ARKit(XCode 9 / Swift 4)。我试图以编程方式执行此操作,因为我希望使用太多变体(或用户生成的图像)来渲染相同形状的对象,以便能够通过场景中的菜单分配来完成。对象只是一个立方体 - 现在,我只想让一面显示从Assets文件夹中提取的这种材料。
这是我之前尝试引用之前的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对象/场景的编程方法。
答案 0 :(得分:0)
总的来说,我正在设置像这样的物体的材料并且它正在工作(只抓住盒子的一面
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]
因此,如评论中所述,您可能无法抓住该物体。