How to Duplicate Geometry from .DAE Files in SceneKit (Swift)
January 11, 2015
The important part of this code is that every duplicated object has it’s own color. Different from the color of the source object.
// Import .dae source
let scene = SCNScene(named: "art.scnassets/chess.dae")!
// Find layer with "queen" name of the figure
let queenNode = scene.rootNode.childNodeWithName("queen", recursively: true)
queenNode?.scale = SCNVector3Make(100, 100, 100)
// Set up scene view
let sceneView = SCNView()
sceneView.frame = self.view.frame
sceneView.scene = scene
sceneView.autoenablesDefaultLighting = true
sceneView.allowsCameraControl = true
sceneView.backgroundColor = UIColor(red: 237/255, green: 229/255, blue: 211/255, alpha: 1)
self.view = sceneView
// Set up camera
let cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
scene.rootNode.addChildNode(cameraNode)
cameraNode.position = SCNVector3(x: -30, y: 0, z: 100)
cameraNode.camera?.automaticallyAdjustsZRange = true
// Create simple for loop
for i in 1...5 {
let box2 = queenNode?.clone() as! SCNNode
let box2Geometry = box2.geometry?.copy() as! SCNGeometry
let box2GeometryNode = SCNNode(geometry: box2Geometry)
box2GeometryNode.scale = SCNVector3Make(100, 100, 100)
box2GeometryNode.position = SCNVector3(x: -20 * Float(i), y: 0, z: 0)
let newMaterial2 = SCNMaterial()
newMaterial2.diffuse.contents = UIColor.yellow
box2GeometryNode.geometry?.firstMaterial = newMaterial2
if i == 2 {
newMaterial2.diffuse.contents = UIColor.red
} else if i < 2 {
newMaterial2.diffuse.contents = UIColor.purple
box2GeometryNode.rotation = SCNVector4Make(0, 1, 0, 1.5)
} else if i > 3 {
newMaterial2.diffuse.contents = UIColor.brown
} else if i == 4 {
newMaterial2.diffuse.contents = UIColor.blue
}
scene.rootNode.addChildNode(box2GeometryNode)
}