Fred
Fred

Reputation: 21

Orient SCNNode in an ARKit scene using real-world bearing

I have a simple SCNNode that I want to place in the real-world position, the node corresponds to a landmark with known coordinates.

The ARKit configuration has the worldAlignment property set to .gravityAndHeading so the x and z axes should be oriented with the world already.

After creating the node, I am setting the position at 100m away from the

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

Then I would like to project the node but with the correct bearing (from user and landmark coordinates). I am trying to rotate the node on the y-axis rotation(yaw)

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

However the node still points to north direction, no matter what values I have for bearingRadians.

Do I need to do an extra transformation?

Upvotes: 2

Views: 1989

Answers (1)

Vasile Cotovanu
Vasile Cotovanu

Reputation: 1570

With eulerAngles you just rotate your node in its own coord system.

What you actually need is to perform a full transform of your node relative to the camera position. The transformation is a translation on -z axis followed by a (negative) rotation on y-axis according to your bearing.

Check out this ARKit WindRose repo which align and project the cardinal directions in the real world: https://github.com/vasile/ARKit-CompassRose

Upvotes: 1

Related Questions