ARKIt 和 RealityKit——为什么相机矩阵的最后一行总是零?

ARKIt and RealityKit – Why in Camera matrix last line always zero?

我已经使用 Xcode 的默认模板开始了一个新的增强现实项目。

我做了arView.session.delegate = self

override func viewDidLoad() {
    super.viewDidLoad()

    // Load the "Box" scene from the "Experience" Reality File
    let boxAnchor = try! Experience.loadBox()

    // Add the box anchor to the scene
    arView.scene.anchors.append(boxAnchor)

    arView.session.delegate = self
}

并在我打印相机变换的地方添加了这个委托方法

func session(_ session: ARSession, didUpdate frame: ARFrame) {
    print(frame.camera.transform)
}

打印出来是这样的:

simd_float4x4([[-0.99477124, -0.02513871, 0.09898488, 0.0], 
               [0.04075573, -0.98642635, 0.15906614, 0.0], 
               [0.09364258, 0.16226865, 0.9822931, 0.0], 
               [-0.031830817, -0.025311433, 0.007536184, 1.0]])

这个打印是列出列的,对吧?并且列顺序是 xyzw,对吗?

如果是这样,该矩阵的最后一行总是 0 0 0 1

为什么?这条线代表什么?

simd_float4x4 结构表示四个 ,具有以下索引:0123。索引为 3 的最后一列包含 xyz 的翻译值。最后一列第四个元素不像四元数中的w,它代表齐次坐标。三个对角线 1 值是 xyz 轴的比例。

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

如果您需要有关 4x4 矩阵的更详细信息,请阅读 this post

最低行的前三个值用于 projection purposes