为什么我们需要 Apple 的"使用场景深度可视化点云"示例代码中的"rotateToARCamera"?



示例代码:https://developer.apple.com/documentation/arkit/visualizing_a_point_cloud_using_scene_depth

在代码中,当将深度映射解投影到世界点时,我们使用的是正z值(深度值)。但在我的理解中,ARKit使用右手坐标系,这意味着正z值的点在相机后面。所以也许我们需要做一些额外的工作来对齐坐标系(使用rotateToARCamera矩阵?)但是我不明白为什么我们需要同时翻转Y和Z平面。

static func makeRotateToARCameraMatrix(orientation: UIInterfaceOrientation) -> matrix_float4x4 {
// flip to ARKit Camera's coordinate
let flipYZ = matrix_float4x4(
[1, 0, 0, 0],
[0, -1, 0, 0],
[0, 0, -1, 0],
[0, 0, 0, 1] )
let rotationAngle = Float(cameraToDisplayRotation(orientation: orientation)) * .degreesToRadian
return flipYZ * matrix_float4x4(simd_quaternion(rotationAngle, Float3(0, 0, 1)))
}

更新:我想关键的一点是用于相机本然矩阵的针孔模型的坐标系与ARKit中的正常相机空间相比有一个相反的方向。

Depth Map是一种像图像数据一样Y坐标上小下大的坐标系,而ARKit是一种Y坐标下小上大的坐标系。

因此,我认为有必要对Y坐标进行反转。

最新更新