在 ARKit 中查找用户面向的方向



我想知道我的相机在ARKit中朝向哪个方向,以便我对面前物体的操作是正确的(说向左滑动向左移动(。

现在我已经尝试使用 POV 方向(不起作用,因为它总是正的(和节点方向(photo.worldFront.z - 除非应用旋转,否则这将起作用,一旦旋转超过 180 度,方向是错误的(。

有什么建议吗?

你先看pointOfView是对的。

Hovewer 虽然rotationeulerAngles都描述了相机面向的方向,但在处理物体(例如在您面前放置或移动物体(时,使用它们并不简单,这是相机的空间。

相反,请在世界空间中设置位置或移动矢量,然后使用相机的transform将其转换为摄像机的空间。

在 Obj-C 中,它会是这样的:

simd_float4x4 transform = self.sceneView.pointOfView.simdTransform;
simd_float4 myPosInWorldSpace = simd_make_float4(0.0, 0.0, -0.5, 1);
simd_float4 myPosInCamSpace = simd_mul(transform, myPosInWorldSpace);

将对象的位置设置为myPosInCamSpace。上面的示例将对象放在相机空间中的z=-0.5,在AR中比相机领先半米。

要将已经在相机前的物体向右移动5 厘米,如下所示:

simd_float4x4 transform = self.sceneView.pointOfView.simdTransform;
transform.columns[3].xyz=0; //drop cam translation
simd_float4 myVecInWorldSpace = simd_make_float4(0.05, 0.0, 0.0, 1);
simd_float4 myVecInCamSpace = simd_mul(transform, myVecInWorldSpace);

myVecInCamSpace添加到您面前对象的位置。

第一修正案

如果您只需要相机在全 360°(−π、π(下偏航以进行日志记录或其他任何操作:

simd_float4x4 transform = self.sceneView.pointOfView.simdTransform;
simd_float3 cam_right = transform.columns[0].xyz; //for completeness
simd_float3 cam_up = transform.columns[1].xyz;  //for completeness
simd_float3 cam_ahead = transform.columns[2].xyz;
float yaw = atan2f(cam_ahead.x, cam_ahead.z);

最新更新