2016-08-05 2 views
2

Ich erstellte einen leeren Knoten und fügte dem leeren Knoten eine Gruppe von Knoten hinzu und fügte diese schließlich meinem Wurzelknoten hinzu. Danach erstelle ich einen Kamera-Knoten wie unten gezeigt. Ich versuche, meiner Scenekit-App eine Funktion hinzuzufügen, bei der die Kamera sich bewegt und den Fokus auf diesen Knoten legt, wenn ein Benutzer auf einen Knoten klickt. In meiner HandleTap-Funktion versuche ich, die Position des Knotens zu ermitteln und dann die Kamera an dieser Position zu fixieren, aber es funktioniert nicht. Irgendwelche Vorschläge?Wie kann ich meinen Kameraknoten auf einen angezapften Knoten fokussieren? (SceneKit)

//snippet 
    var emptyNode = SCNNode() 
    emptyNode.addChildNode(Node) 
    rootNode.addChildNode(emptyNode) 

    cameraNode.camera = SCNCamera() 
    cameraNode.position = SCNVector3(1,0,10) 
    rootNode.addChildNode(cameraNode) 


    func handleTap(recognizer: UITapGestureRecognizer) { 
      let location = recognizer.locationInView(sceneView) 
      let hits = sceneView!.hitTest(location, options: nil) 

      if let tap = hits.first?.node { 
       tappNode = tap 
       myScene?.cameraNode.position = tappNode.position 
      } 

EDIT

Also, ich mache ein wenig Fortschritte, aber ich kann immer noch nicht die Position meines Knoten herauszufinden. Der aktualisierte Code ist unten angegeben. Ich habe einen neuen Knoten erstellt und eine Kamera an ihn angeschlossen. Dieser Knoten wird dann als Kind zu dem Abgriffknoten hinzugefügt. Ich kann immer noch nicht die Position des Abgriffsknotens im Kontext des leeren Knotens erhalten.

let cameraNode = SCNNode() 
cameraNode.name = "cameraNode" 
cameraNode.camera = SCNCamera() 
cameraNode.position = SCNVector3Make(1,0,10) 


tappNode.addChildNode(cameraNode) 


SCNTransaction.begin() 
SCNTransaction.setAnimationDuration(3.0) 

SCNTransaction.setCompletionBlock() { 
    print("done") 
} 
sceneView!.pointOfView = cameraNode 

SCNTransaction.commit() 

Antwort

0

Wenn Sie die Kamera Knoten zum angezapft Knoten verschieben (oder eine neue Kamera am angezapft Knoten erstellen), machen Sie es fast unmöglich, die angezapft Knoten von dieser Kamera zu sehen.

Wie wäre es

let lookAtConstraint = SCNLookAtConstraint.init(tappNode) 
sceneView!.pointOfView.constraints = [lookAtConstraint] 

einen Verweis auf lookAtConstraint halten, so dass Sie seine target auf nachfolgenden Taps ändern können.

0

In meiner eigenen App habe ich einen "Standard" Sicht als SCNNode, die ich beim Start definieren, z.

defaultPoint

Durch Doppeltippen, die Benutzer-Resets auf diese Sicht einfach so

scnView.pointOfView = self.defaultPoint

wo scnView die Haupt SCNView mit allen Knoten ist. In Ihrem Fall müssen Sie einen oder mehrere knotenspezifische Point-of-View-Knoten (die offensichtlich nicht die gleichen Koordinaten wie die Knoten selbst haben) durch Trial-and-Error definieren und dann die Szenenansicht festlegen Sichtweise entsprechend.

PS mein Haupt-SCNView hat allowsCameraControl auf True gesetzt.

Verwandte Themen