从 ARCamera 获取相机翻译
Get Camera Translation from ARCamera
我正在试用 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
}
向量的最后一列是翻译值。您可以从第 3 列
中获取翻译后的值
我正在试用 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
}
向量的最后一列是翻译值。您可以从第 3 列
中获取翻译后的值