gpt4 book ai didi

swift - ARKit中如何获取Camera Position和Image Object Position的角度和距离?

转载 作者:搜寻专家 更新时间:2023-11-01 05:32:47 26 4
gpt4 key购买 nike

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

尝试了很多代码。

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.tranform 之间的距离和角度。任何帮助将不胜感激。提前致谢。

最佳答案

您需要使用相机变换和/或 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)

关于swift - ARKit中如何获取Camera Position和Image Object Position的角度和距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52477238/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com