【问题标题】:ARKit – Position of the ARCameraARKit – ARCamera 的位置
【发布时间】:2017-12-20 14:24:41
【问题描述】:

我正在尝试使用 ARKit,我的问题很简单。如何获取相机的位置?

我知道,如果我在 (0,0,0) 上加上 SCNNode 并且我的 ARCamera 正在寻找地面,我将不得不抬头才能看到 3D 对象。这意味着必须以某种方式访问​​设备摄像头的位置和方向。

那么我怎么知道where the camera iswhere she is looking to

提前致谢。

【问题讨论】:

标签: 3d camera scenekit augmented-reality arkit


【解决方案1】:

您可以使用ARCamera.transform 属性来获取相机的当前变换。 以下代码来自Introducing ARKit at WWDC 2017,您可能希望将其作为介绍观看。 我们正在使用变换将一个节点放置在相机前方 10 厘米处。

在 Swift 中:

var translation = matrix_identity_float4x4
translation.columns.3.z = -0.1 // Translate 10 cm in front of the camera
node.simdTransform = matrix_multiply(currentFrame.camera.transform, translation)

在 Objective-C 中

matrix_float4x4 translation = matrix_identity_float4x4;
translation.columns[3][2] = -0.1; // Translate 10 cm in front of the camera
node.simdTransform = matrix_multiply(currentFrame.camera.transform, translation)

【讨论】:

  • 这就是我所说的真正的英雄!非常感谢 !如果我想偏移 x 和 y 坐标,它也在第三列吗?
  • 您应该阅读并学习一些 3D 图形基础知识和transformation matrices
  • 你能在 Objective c 中复制吗?
  • @Dev_Tandel 它会是这样的:``` matrix_float4x4 translation = matrix_identity_float4x4;翻译.columns[3][2] = -0.1; // 平移相机前方 10 厘米 node.simdTransform = matrix_multiply(currentFrame.camera.transform, translation); ```
  • @orangenkopf - 谢谢我转换了你的其他答案
【解决方案2】:

或者,您可以同时对XYZ 轴使用以下方法:

var translation = matrix_identity_float4x4

translation.columns.3 = simd_float4(0, 0.2, -0.5, 1)      // x, y, z, HC

aNode.simdTransform = matrix_multiply(translation, 
                                      currentFrame.camera.transform)

columns.3中的最后一个元素是齐次坐标,等于1

希望这会有所帮助。

【讨论】: