SceneKit – Get direction of camera
Asked Answered
F

1

5

I need to find out which direction a camera is looking at, e.g. if it is looking towards Z+, Z-, X+, or X-.

I've tried using eulerAngles, but the range for yaw goes 0 -> 90 -> 0 -> -90 -> 0 which means I can only detect if the camera is looking towards Z or X, not if it's looking towards the positive or negative directions of those axes.

Fletcher answered 19/7, 2017 at 8:53 Comment(1)
you do a dot product to do thisOndrea
H
13

You can create an SCNNode that place it in worldFront property to get a vector with the x, y, and z direction.

Another way you could do it is like how this project did it:

// Credit to https://github.com/farice/ARShooter

func getUserVector() -> (SCNVector3, SCNVector3) { // (direction, position)
        if let frame = self.sceneView.session.currentFrame {
            let mat = SCNMatrix4(frame.camera.transform) // 4x4 transform matrix describing camera in world space
            let dir = SCNVector3(-1 * mat.m31, -1 * mat.m32, -1 * mat.m33) // orientation of camera in world space
            let pos = SCNVector3(mat.m41, mat.m42, mat.m43) // location of camera in world space

            return (dir, pos)
        }
        return (SCNVector3(0, 0, -1), SCNVector3(0, 0, -0.2))
    }
Horsefaced answered 19/7, 2017 at 17:13 Comment(2)
Also, this is assuming that you are using ARKit, as your tag suggestsHorsefaced
I didn't catch how can I know the direction after calculating "dir" ??Pucida

© 2022 - 2024 — McMap. All rights reserved.