2017-07-23 2 views
2

J'ai un simple SCNNode que je veux placer dans la position du monde réel, le nœud correspond à un point de repère avec des coordonnées connues.Orient SCNNode dans une scène ARKit en utilisant le roulement réel

La configuration de ARKit a la propriété worldAlignment définie sur .gravityAndHeading, donc les axes x et z doivent déjà être orientés avec le monde.

Après avoir créé le nœud, je suis en train de la position à 100 mètres de la

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

Je voudrais projeter le nœud, mais avec le roulement correct (à partir des coordonnées de l'utilisateur et repère). Je suis en train de tourner le nœud sur la rotation axe y (lacet)

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

Cependant, le nœud pointe toujours à la direction du Nord, peu importe ce que les valeurs que j'ai pour bearingRadians.

Ai-je besoin de faire une transformation supplémentaire?

Répondre

1

Avec eulerAngles vous faites simplement pivoter votre nœud dans son propre système de coordonnées.

Ce dont vous avez réellement besoin est d'effectuer une transformation complète de votre nœud par rapport à la position de la caméra. La transformation est une traduction sur -z axis suivie d'une rotation (négative) sur y-axis en fonction de votre cap.

Découvrez ce repo ARKit WindRose qui alignent et projettent les directions cardinales dans le monde réel: https://github.com/vasile/ARKit-CompassRose