【问题标题】:How to get the Angle and distance between Camera Position and Image Object Position in ARKit?如何在 ARKit 中获取相机位置和图像对象位置之间的角度和距离?
【发布时间】:2019-02-27 20:12:02
【问题描述】:

在 AR 应用程序上工作,一旦跟踪图像并放置 3d 模型,我需要将对象放置在 ARImageAnchor 上,然后它不应与图像锚点一起移动,它应该只跟随 iPhone 上的相机角度并与锚点的距离。

尝试了很多代码。

func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
    let node = SCNNode()
    if let imageAnchor = anchor as? ARImageAnchor {
            self.mainNode.simdTransform = anchor.transform
            self.sceneView.scene.rootNode.addChildNode(self.mainNode)
}

再试一次:

func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
    let node = SCNNode()
    if let imageAnchor = anchor as? ARImageAnchor {
            guard let pointOfView = self.sceneView.pointOfView else { return }
            let transform = pointOfView.transform
            self.mainNode.transform = transform
self.sceneView.scene.rootNode.addChildNode(self.mainNode)

}

func renderer(_ renderer: SCNSceneRenderer, willRenderScene scene: SCNScene, atTime time: TimeInterval) {
    guard let pointOfView = self.sceneView.pointOfView else { return }
    let transform = pointOfView.transform


let translationMatrix = SCNMatrix4Translate(transform, 1.0 , -0.5, -3.0)
}

无法理解如何获取 pointOfView 变换和 Anchor.transform 之间的距离和角度。 任何帮助将不胜感激。 提前致谢。

【问题讨论】:

  • 您找到解决方案了吗?我也遇到了这个

标签: swift augmented-reality arkit ios12


【解决方案1】:

您需要使用相机变换和/或 eulerAngle:

let cameraTransform = self.sceneView.session.currentFrame.camera.transform
let cameraEulerAngle = self.sceneView.session.currentFrame.camera.eulerAngle

cameraTransform 是一个 4x4 矩阵,如果要单坐标,则需要获取第三列:

let x = cameraTransform.columns.3.x
let y = cameraTransform.columns.3.y
let x = cameraTransform.columns.3.z

三轴坐标。

cameraEulerAngle 是一个 3x3 矩阵,你可以得到:

  • 俯仰(x 旋转)
  • 偏航(y 旋转)
  • 滚动(z 旋转)

let angleX = cameraEulerAngle.x
let angleY = cameraEulerAngle.y
let angleZ = cameraEulerAngle.z

如果您希望将节点定位在您的摄像头前面,您需要使用摄像头 X、Y 坐标并给出 Z 值,即距摄像头的距离(以米为单位)。 请注意,如果您想要更精确,则需要根据相机旋转在轴坐标上添加偏移量。

您可以获取更多信息herehere (ARCamera)

【讨论】:

    猜你喜欢
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2018-03-25
    • 2018-08-23
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    相关资源
    最近更新 更多