ARKit的ARFaceTrackingConfiguration将ARFaceAnchor与人脸在场景中的位置和方向信息一起放置。除此之外,这个锚具有我感兴趣的lookAtPoint属性。我知道这个矢量是相对于脸的。我如何在屏幕上为这个位置画一个点,这意味着我如何转换这个点的坐标?
ARFaceTrackingConfiguration
ARFaceAnchor
lookAtPoint
3zwtqj6y1#
.lookAtPoint
Apple文档说:.lookAtPoint是面部坐标空间中仅估计面部方向的注视的位置。它是一个包含三个标量值的向量,它只是可获取的,而不是可设置的:
var lookAtPoint: SIMD3<Float> { get }
换句话说,这是两个量的乘积的结果向量-.rightEyeTransform和.leftEyeTransform示例属性(也是可获取的):
.rightEyeTransform
.leftEyeTransform
var rightEyeTransform: simd_float4x4 { get } var leftEyeTransform: simd_float4x4 { get }
下面是一个关于如何使用这个示例属性的想象情况:
func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) { if let faceAnchor = anchor as? ARFaceAnchor, let faceGeometry = node.geometry as? ARSCNFaceGeometry { if (faceAnchor.lookAtPoint.x >= 0) { // Looking (+X) faceGeometry.firstMaterial?.diffuse.contents = UIImage(named: "redTexture.png") } else { // Looking (-X) faceGeometry.firstMaterial?.diffuse.contents = UIImage(named: "cyanTexture.png") } faceGeometry.update(from: faceAnchor.geometry) facialExrpession(anchor: faceAnchor) DispatchQueue.main.async { self.label.text = self.textBoard } } }
下面是一个显示ARFaceTrackingConfiguration()轴方向的图像:
我可以说,您不能直接管理这个点的坐标,因为它是只能获取的属性(只有XYZ方向,没有XYZ平移)。因此,如果您需要平移和旋转,请使用.rightEyeTransform和.lefttEyeTransform示例属性。
.lefttEyeTransform
在SceneKit/ARKit中有两种点投影方法。使用以下示例method将点投影到二维视图上(对于sceneView示例):
SceneKit
ARKit
sceneView
func projectPoint(_ point: SCNVector3) -> SCNVector3
或:
let sceneView = ARSCNView() sceneView.projectPoint(myPoint)
此外,在ARKit中,您必须实现以下示例method,以将点投影到2D视图上(对于arCamera示例):
arCamera
func projectPoint(_ point: simd_float3, orientation: UIInterfaceOrientation, viewportSize: CGSize) -> CGPoint
let camera = ARCamera() camera.projectPoint(myPoint, orientation: myOrientation, viewportSize: vpSize)
此方法可帮助您将点从场景的三维世界坐标系投影到渲染器的二维像素坐标系。
还有SceneKit的method用于取消投影点:
func unprojectPoint(_ point: SCNVector3) -> SCNVector3
欲了解更多详情,请阅读这篇文章。...和ARKit的method用于取消投影点:
@nonobjc func unprojectPoint(_ point: CGPoint, ontoPlane planeTransform: simd_float4x4, orientation: UIInterfaceOrientation, viewportSize: CGSize) -> simd_float3?
1条答案
按热度按时间3zwtqj6y1#
.lookAtPoint
属性仅用于方向估计Apple文档说:
.lookAtPoint
是面部坐标空间中仅估计面部方向的注视的位置。它是一个包含三个标量值的向量,它只是可获取的,而不是可设置的:换句话说,这是两个量的乘积的结果向量-
.rightEyeTransform
和.leftEyeTransform
示例属性(也是可获取的):下面是一个关于如何使用这个示例属性的想象情况:
下面是一个显示ARFaceTrackingConfiguration()轴方向的图像:
回答您的问题
我可以说,您不能直接管理这个点的坐标,因为它是只能获取的属性(只有XYZ方向,没有XYZ平移)。
因此,如果您需要平移和旋转,请使用
.rightEyeTransform
和.lefttEyeTransform
示例属性。投影点
在
SceneKit
/ARKit
中有两种点投影方法。使用以下示例method将点投影到二维视图上(对于sceneView
示例):或:
此外,在
ARKit
中,您必须实现以下示例method,以将点投影到2D视图上(对于arCamera
示例):或:
此方法可帮助您将点从场景的三维世界坐标系投影到渲染器的二维像素坐标系。
取消拒绝点
还有SceneKit的method用于取消投影点:
欲了解更多详情,请阅读这篇文章。
...和ARKit的method用于取消投影点: