首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ARKit中获取相机位置与图像目标位置之间的角度和距离?

如何在ARKit中获取相机位置与图像目标位置之间的角度和距离?
EN

Stack Overflow用户
提问于 2018-09-24 10:21:36
回答 1查看 2.2K关注 0票数 4

在AR应用程序中,我需要将物体放在ARImageAnchor上,一旦图像被跟踪并放置3d模型,那么它就不应该和图像锚一起移动,它应该只跟踪iPhone上的摄像机角度,并且离锚有一定的距离。

尝试了很多密码。

代码语言:javascript
复制
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)
}

另一次尝试:

代码语言:javascript
复制
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)

}

代码语言:javascript
复制
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之间的距离和角度。任何帮助都会很感激的。提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-09-24 12:58:01

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

代码语言:javascript
复制
let cameraTransform = self.sceneView.session.currentFrame.camera.transform
let cameraEulerAngle = self.sceneView.session.currentFrame.camera.eulerAngle

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

代码语言:javascript
复制
let x = cameraTransform.columns.3.x
let y = cameraTransform.columns.3.y
let x = cameraTransform.columns.3.z

是三轴坐标。

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

  • 螺距(x旋转)
  • 偏航(y旋转)
  • 滚动(z旋转)

代码语言:javascript
复制
let angleX = cameraEulerAngle.x
let angleY = cameraEulerAngle.y
let angleZ = cameraEulerAngle.z

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

您可以获得更多信息这里这里(ARCamera)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52477238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档