我在iOS 12下使用ARKit 2(16A5288q),使用xcode10beta6构建,在iPhone X上运行,lookAtPoint总是零。
我通过以下方式访问面部数据(以Swift格式):

func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {
    guard let faceAnchor = anchor as? ARFaceAnchor else { return }

    FaceAnchorsProcessedCount = FaceAnchorsProcessedCount + 1
    let rightEyeTransform: simd_float4x4 = faceAnchor.rightEyeTransform
    let leftEyeTransform:  simd_float4x4 = faceAnchor.leftEyeTransform
    let lookAtPoint:       simd_float3   = faceAnchor.lookAtPoint
}

我得到的数据是:
rightEyeTransform    simd_float4x4    \n[ [9.999874e-01, 0.000000e+00, 5.010252e-03, -3.208227e-02],\n  [2.375229e-04, 9.988756e-01, -4.740678e-02, 2.703529e-02],\n  [-5.004618e-03, 4.740737e-02, 9.988630e-01, 2.525132e-02],\n  [0.000000e+00, 0.000000e+00, 0.000000e+00, 1.000000e+00] ]\n
leftEyeTransform     simd_float4x4    \n[ [9.978353e-01, 0.000000e+00, -6.576237e-02, 3.208223e-02],\n  [-3.110934e-03, 9.988804e-01, -4.720329e-02, 2.703534e-02],\n  [6.568874e-02, 4.730569e-02, 9.967182e-01, 2.525137e-02],\n  [0.000000e+00, 0.000000e+00, 0.000000e+00, 1.000000e+00] ]\n
lookAtPoint          simd_float3      (0.000000e+00, 0.000000e+00, 0.000000e+00)

我做错什么了?或者这是一个已知的错误?
2018年10月4日更新
我今天做了一个简单的lookAtPoint测试。我把脸移近手机,然后再移远一点,然后又合上;反复地。
观测点的最小z为38.59英寸,最大z为39.17英寸(从米换算)。
用卷尺测量的实际距离约为4.5英寸和33英寸。
苹果公司的声明称,lookAtPoint将“[…]估计用户的眼睛相对于脸部的哪个点。”这似乎是不正确的。

最佳答案

是的,我一个月前就试过了,我可以说你是绝对正确的,lookAtPoint实例属性目前不起作用,甚至没有问题。现在它总是返回float3(0.0, 0.0, 0.0)
我想苹果还没有实现它(它处于beta状态)。Cross eyes' detection是ARKit的一个特性,我们似乎会在iOS 12最终的稳定版本中看到。
目前我没有Mac,也无法检查,所以请尝试将open class与以下开放实例属性一起使用:

open class ARFaceAnchor: ARTrackable {
    open var leftEyeTransform: simd_float4x4 { get }
    open var rightEyeTransform: simd_float4x4 { get }
    open var lookAtPoint: simd_float3 { get }
}

希望有帮助!

10-08 18:12