2016-06-10 9 views
1

Kann jemand den Ursprung eines Knotens im SceneKit Interface Builder ändern? Der Ursprung ist falsch, aber das Bewegen bewegt das Modell einfach, ich möchte den Ursprung so verschieben, dass es sich in der Mitte des Objekts befindet: -/Ändern des Ursprungs des Knotens im SceneKit Interface Builder

Vielleicht muss ich mein Modell mit einem anderen Ursprung re-exportieren?

Object origin

Antwort

4

Reposition der Knoten des pivot. Zum Beispiel

truckNode.pivot = SCNMatrix4MakeTranslation(13.4, 12.9, 28.9) 

Sie können auch eine Drehung des Dreh ändern, aber es scheint, dass Sie gerade in den translationalen Aspekten interessiert sind, die das oben genannte Beispiel erfüllt.

Eine weitere Option besteht darin, Ihren Knoten zu einem Kind eines ansonsten leeren "Container-Knotens" zu machen. Positionieren Sie Ihren Knoten innerhalb des Containers neu und führen Sie anschließend alle nachfolgenden Translationen und Rotationen auf dem Containerknoten aus.

Eine weitere Option mit Interface Builder. Wählen Sie Ihre Dae-Datei. Unten im Editorfenster befindet sich links eine quadratische Schaltfläche mit einem Balken auf der linken Seite. Klicken Sie darauf, um das Szenen-Diagramm zu öffnen. Dies zeigt eine hierarchische Liste der Knoten in Ihrer Datei. Wählen Sie im Fenster Dienstprogramme auf der rechten Seite in Ihrem Xcode-Fenster das Symbol "Box". Sie können dort eine Knotenposition numerisch anpassen. Sie können seine Achsen auch direkt im Editor ziehen. Aber das wird nicht den Drehpunkt ändern, den ich denke, was du machen willst. Möglicherweise müssen Sie einen neuen Knoten erstellen, der wie oben beschrieben als Container fungiert. Dies kann durch Klicken mit der rechten Maustaste auf einen Knoten im Szenengraphen erfolgen, um ein Menü aufzurufen. Meiner Meinung nach ist das Setzen der pivot in Code einfacher. Details unten.

BTW, Sie können die Namen der Knoten in Ihrer Dae-Szene aus dem Szenengraphen in diesem Editor abrufen. Hier ist, wie Sie Dae Knoten in Code zugreifen:

guard let theTruck = SCNScene(named: "myTruck") else { 
     print("Couldn't find molecule in dictionary (myTruck)") 
     return } 

    let truck = theTruck.rootNode.childNodeWithName("truckBase", recursively: true)! 
    truck.pivot = SCNMatrix4MakeTranslation(12.0, 0, 8.0) 

In diesem Beispiel: "myTruck" ist der Name Ihres dae-Datei ohne die dae Suffix. "truckBase" ist der Name Ihres Wurzelknotens innerhalb der Dae-Datei (Sie können den Namen im Editor Scene Graph ändern, falls gewünscht). "LKW" ist ein neuer Knoten, dem Sie den Stammknoten Ihrer Datei zugewiesen haben. Manipuliere es genauso wie du und statt dessen den Wurzelknoten deines Daes. "TheTruck" ist ein temporärer Halter für den Dae SCNScene, der nur für den Zugriff auf die Knoten innerhalb von verwendet wird. Sie können auf alle anderen Knoten in Ihrem Dae auf die gleiche Weise zugreifen, so dass Sie sie im Code manipulieren können.

+0

Gibt es das im Interface Builder? – Chris

+0

Ja, aber problematischer. Ich habe oben ausgearbeitet. – bpedit