2017-07-23 5 views
2

Ich habe eine einfache SCNNode, die ich in der realen Position platzieren möchte, entspricht der Knotenpunkt mit bekannten Koordinaten.Orient SCNNode in einer ARKit-Szene mit realen Lager

Die ARKit-Konfiguration hat die worldAlignment-Eigenschaft auf .gravityAndHeading eingestellt, so dass die X- und Z-Achsen bereits mit der Welt ausgerichtet sein sollten.

Nach den Knoten zu schaffen, ich bin die Position in 100m Einstellung aus den entfernt

node.position = SCNVector3(0, 0, -100) 

Dann Ich mochte den Knoten projizieren, aber mit dem richtigen Lager (von Benutzern und Wahrzeichen Koordinaten). Ich versuche, den Knoten auf der y-Achsen-Rotation (Gieren)

node.eulerAngles = SCNVector3Make(0, bearingRadians, 0) 

jedoch der Knoten noch weist nach Norden Richtung zu drehen, egal welche Werte ich für bearingRadians haben.

Muss ich eine zusätzliche Transformation durchführen?

Antwort

1

Mit eulerAngles drehen Sie einfach Ihren Knoten in einem eigenen Koordinatensystem.

Was Sie tatsächlich brauchen, ist eine vollständige Transformation Ihres Knotens relativ zur Kameraposition durchzuführen. Die Transformation ist eine Übersetzung auf -z axis gefolgt von einer (negativen) Rotation auf y-axis nach Ihrer Ausrichtung.

prüfen diese Arkit Windrose Repo aus, die die Himmelsrichtungen in der realen Welt ausrichten und projizieren: https://github.com/vasile/ARKit-CompassRose