ARKit – What do the different columns in Transform Matrix represent?

前端 未结 2 1693
深忆病人
深忆病人 2020-11-30 08:25

An ARAnchor\'s 4x4 matrix has 4 columns. The fourth column of the matrix contains 3 translate values for x, y, and z coor

2条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-11-30 08:57

    ARKit, RealityKit and SceneKit frameworks use 4 x 4 Transformation Matrices to translate, rotate, scale and shear 3D objects (just like simd_float4x4 matrix type). Let's see how these matrices look like.

    In 3D Graphics we often use a 4x4 Matrix with 16 useful elements. The Identity 4x4 Matrix is as following:

    Between those sixteen elements there are 6 different shearing coefficients:

    shear XY
    shear XZ
    shear YX
    shear YZ
    shear ZX
    shear ZY
    

    In Shear Matrix they are as followings:

    Because there are no Rotation coefficients at all in this Matrix, six Shear coefficients along with three Scale coefficients allow you rotate 3D objects about X, Y, and Z axis using magical trigonometry (sin and cos).

    Here's an example how to rotate 3D object (CCW) about its Z axis using Shear and Scale elements:

    Look at 3 different Rotation patterns using Shear and Scale elements:

    And, of course, 3 elements for translation (tx,ty,tz) in the 4x4 Matrix are located on the last column:

     ┌               ┐
     |  1  0  0  tx  |
     |  0  1  0  ty  |
     |  0  0  1  tz  |
     |  0  0  0  1   |
     └               ┘
    

    The columns' indices in ARKit, SceneKit and RealityKit are: 0, 1, 2, 3.

    The fourth column (index 3) is for translation values:

    var translation = matrix_identity_float4x4
    
    translation.columns.3.x
    translation.columns.3.y
    translation.columns.3.z
    


    You can read my illustrated story about MATRICES on Medium.


    Perspective and orthographic projections

    Values located in the bottom row of a 4x4 matrix is used for perspective projection.

    And, of course, you need to see an example of how to setup an orthographic projection.

提交回复
热议问题