Skip to content

How adjust project to track multiple objects? #3

@albertoleon7794

Description

@albertoleon7794

How can I adjust this project to start tracking more than one object?
`
class ViewController: UIViewController, ARSCNViewDelegate {

@IBOutlet var sceneView: ARSCNView!
@IBOutlet var sceneView2: ARSCNView!

override func viewDidLoad() {
    super.viewDidLoad()
    
    // Set the view's delegate
    sceneView.delegate = self

    
    // Show statistics such as fps and timing information
    sceneView.showsStatistics = false
    
    // Create a new scene
    let scene = SCNScene(named: "art.scnassets/GameScene.scn")!

    
    // Set the scene to the view
    sceneView.scene = scene
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    
    // Create a session configuration
    let configuration = ARWorldTrackingConfiguration()
    let configuration2 = ARWorldTrackingConfiguration()

    
    // Object Detection
    configuration.detectionObjects = ARReferenceObject.referenceObjects(inGroupNamed: "CentroObjects", bundle: Bundle.main)!
    
    // Object Detection
    configuration2.detectionObjects = ARReferenceObject.referenceObjects(inGroupNamed: "SofaObjects", bundle: Bundle.main)!

    // Run the view's session
    sceneView.session.run(configuration)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    
    // Pause the view's session
    sceneView.session.pause()
}

// MARK: - ARSCNViewDelegate

func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
    
    let node = SCNNode()
    let node2 = SCNNode()

    
    if let objectAnchor = anchor as? ARObjectAnchor {
        
        let plane = SCNPlane(width: CGFloat(objectAnchor.referenceObject.extent.x * 0.6), height: CGFloat(objectAnchor.referenceObject.extent.y * 0.5))
        
        plane.cornerRadius = plane.width / 8
        
        let spriteKitScene = SKScene(fileNamed: "ProductInfo_2")
        
        plane.firstMaterial?.diffuse.contents = spriteKitScene
        plane.firstMaterial?.isDoubleSided = true
        plane.firstMaterial?.diffuse.contentsTransform = SCNMatrix4Translate(SCNMatrix4MakeScale(1, -1, 1), 0, 1, 0)
        
        let planeNode = SCNNode(geometry: plane)
        planeNode.position = SCNVector3Make(objectAnchor.referenceObject.center.x, objectAnchor.referenceObject.center.y + 0.70, objectAnchor.referenceObject.center.z)
        
        node.addChildNode(planeNode)
        
    }
    
    if let objectAnchor2 = anchor as? ARObjectAnchor {

        let plane2 = SCNPlane(width: CGFloat(objectAnchor2.referenceObject.extent.x * 0.6), height: CGFloat(objectAnchor2.referenceObject.extent.y * 0.5))

        plane2.cornerRadius = plane2.width / 8

        let spriteKitScene2 = SKScene(fileNamed: "sofacama")

        plane2.firstMaterial?.diffuse.contents = spriteKitScene2
        plane2.firstMaterial?.isDoubleSided = true
        plane2.firstMaterial?.diffuse.contentsTransform = SCNMatrix4Translate(SCNMatrix4MakeScale(1, -1, 1), 0, 1, 0)

        let planeNode2 = SCNNode(geometry: plane2)
        planeNode2.position = SCNVector3Make(objectAnchor2.referenceObject.center.x, objectAnchor2.referenceObject.center.y + 0.70, objectAnchor2.referenceObject.center.z)

        node.addChildNode(<#T##child: SCNNode##SCNNode#>)
    }
    
    
    return node
}


func session(_ session: ARSession, didFailWithError error: Error) {
    // Present an error message to the user
    
}

func sessionWasInterrupted(_ session: ARSession) {
    // Inform the user that the session has been interrupted, for example, by presenting an overlay
    
}

func sessionInterruptionEnded(_ session: ARSession) {
    // Reset tracking and/or remove existing anchors if consistent tracking is required
    
}

}
`
I've tried to add multiple anchors but when I add it to the node it only loads the last one.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions