我正在使用 ARKitARFaceTrackingConfiguration
对齐ARConfiguration.WorldAlignment.camera
,但我发现文档(似乎)并没有反映现实;
根据下面的文档摘录,我希望面部锚点transform
以右手坐标系表示。但是,当我尝试移动头部时,我注意到面部锚点的 Z 坐标始终为负(即faceAnchor.transform.columns.3.z < 0
)。请注意,在 X 和 Y 方向上移动头部对应于预期结果(与 Z 坐标不同)。
相机对齐根据设备相机的本机传感器方向定义坐标系。相对于一个
AVCaptureVideoOrientation.landscapeRight
方向的相机图像,x 轴指向右侧,y 轴指向上方,z 轴指向设备的前部(朝向用户)。
我希望transform
按照文档行事,即面部锚的 Z 坐标应该是正的,因为文档说“ z 轴指向设备的前面(朝向用户) ”。到目前为止,Z 轴似乎指向设备的背面……
我错过了一些明显的东西吗?
我尝试通过以下代码修复旋转,但我不确定它是否是解决此问题的正确方法:
// Repair rotation
let oldFaceRotation = simd_quatf(face.transform) // get quaternion from
let repairedFaceRotation = simd_quatf(ix: oldFaceRotation.axis.y, iy: oldFaceRotation.axis.x, iz: -oldFaceRotation.axis.z, r: oldFaceRotation.real)
// Repair translation
var repairedPosition = face.transform.columns.3
repairedPosition.z *= -1
// Combine
var correctedFaceTransform = float4x4(repairedFaceRotation)
correctedFaceTransform.columns.3 = repairedPosition