2017-07-19 7 views
3

J'ai besoin de savoir dans quelle direction une caméra regarde, par ex. s'il regarde vers Z +, Z-, X + ou X-. J'ai essayé d'utiliser eulerAngles, mais la plage de lacet va 0 -> 90 -> 0 -> -90 -> 0 ce qui signifie que je peux seulement détecter si la caméra regarde vers Z ou X, pas si c'est regardant vers les directions positives ou négatives de ces axes.Swift SceneKit - Obtenir la direction de la caméra

Répondre

5

Vous pouvez créer un SCNNode qui le place dans la propriété worldFront pour obtenir un vecteur avec les directions x, y et z.

Une autre façon, vous pouvez le faire est comme la façon dont ce projet a fait:

// 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)) 
    } 
+0

En outre, ceci suppose que vous utilisez Arkit, comme votre balise suggère – wriuhasdfhvhasdv