我正在试验Apple的ARKit,并对摄像机转换有疑问。变换矩阵中的哪个值表示用户从原点移动了多远?调用
self.sceneView.session.currentFrame!.camera.transform.columns.0.x
似乎没有产生正确的X
翻译。
另外,Y
和Z
的正确位置是什么?
4x4变换矩阵的最后一列 - 在这种情况下是matrix.columns.3
- 是平移向量。有关4x4变换矩阵的一些背景知识以及它们的工作原理,请参阅this old answer。
获取ARCamera
翻译的最简单方法如下:
func getCameraTransform(for sceneView: ARSCNView) -> MDLTransform {
guard let transform = sceneView.session.currentFrame?.camera.transform else { return }
return MDLTransform(matrix: transform)
}
let position = SCNVector3(cameraTransform.translation.x,
cameraTransform.translation.y,
cameraTransform.translation.z)
func session(_ session: ARSession, didUpdate frame: ARFrame)
{
// Do something with the new transform
let currentTransform = frame.camera.transform
let x = currentTransform.columns.3.x
let y = currentTransform.columns.3.y
let z= currentTransform.columns.3.z
}