Convert matrix_float4x4 to x y z space

前端 未结 3 702
清歌不尽
清歌不尽 2020-12-24 15:20

I\'m using ARKit and trying to get the position of the camera as a rotation and (x,y,z) coordinates in real world space. All I can manage to get is a matrix_float4x4

相关标签:
3条回答
  • 2020-12-24 15:47

    A good way to figure this out is to learn about 4x4 matrices as they are really the basis for all 3D visualization and mathematics.

    • To get the position from a 4x4 matrix use the entries m41, m42, m43.
    • To get the rotation use the 3x3 matrix in m11 ... m33.

    Some resources to get you started:

    • Brush up on that linear algebra first in 2D, then 3D: I like http://blog.wolfire.com/2009/07/linear-algebra-for-game-developers-part-1/
    • Or if the game programming stuff turns you off: https://betterexplained.com/articles/linear-algebra-guide/
    • Then straight to GL: http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/
    0 讨论(0)
  • 2020-12-24 15:50

    Two ways you can get the position of the camera:

    1. By using the currentFrame property of session you can get the transform of the camera and then use that to get the position:

      matrix_float4x4 cameraTransform = self.sceneView.session.currentFrame.camera.transform;
      SCNVector3 cameraPosition = SCNVector3Make(cameraTransform.columns[3].x, 
      cameraTransform.columns[3].y, cameraTransform.columns[3].z);
      
    2. Or get the position of the camera using the pointOfView property of the sceneView:

      SCNVector3 cameraPosition = self.sceneView.pointOfView.worldPosition;
      
    0 讨论(0)
  • 2020-12-24 15:59

    I'm using matrix_float4x4 extension for that:

    extension matrix_float4x4 {
        func position() -> SCNVector3 {
            return SCNVector3(columns.3.x, columns.3.y, columns.3.z)
        }
    }
    

    Using:

    let position = transform.position()
    

    Or you can convert position directly in code:

    let position = SCNVector3(
        transform.columns.3.x,
        transform.columns.3.y,
        transform.columns.3.z
    )
    
    0 讨论(0)
提交回复
热议问题