如何在ARkit中获取场景的真实中心坐标

时间:2019-01-10 05:51:00

标签: swift arkit

在ARKit中,如果我有ARSCNView,如何获取当前场景的真实中心坐标?我正在使用Swift作为编程语言。

2 个答案:

答案 0 :(得分:0)

您可以通过这样的手势来获得接触点

// 1.
@objc func tapped(recognizer :UIGestureRecognizer) {
    // Get exact position where touch happened on screen of iPhone (2D coordinate)
    let touchPosition = recognizer.location(in: sceneView)

    // 2.
    // Conduct a hit test based on a feature point that ARKit detected to find out what 3D point this 2D coordinate relates to
    let hitTestResult = sceneView.hitTest(touchPosition, types: .featurePoint)

    // 3.
    if !hitTestResult.isEmpty {
        guard let hitResult = hitTestResult.first else {
            return
        }
        print(hitResult.worldTransform.columns.3)
    }
}

您可以获取点位置

let positionOfObjectToAdd = SCNVector3(hitResult.worldTransform.columns.3.x,hitResult.wor

ldTransform.columns.3.y,hitResult.worldTransform.columns.3.z)

答案 1 :(得分:0)

董阮,

希望您有美好的一天:-)

我将尝试提供帮助(只是不确定您要寻找的是什么)...但是我认为我有一些线索;-)

我将给您提示,看看我是否可以帮忙:

问题: “如何获取arkit场景的真实世界中心坐标?”

1)如果您要询问现实世界坐标系的中心: 这是您的看法:

https://developer.apple.com/documentation/scenekit/scndebugoptions/2882039-showworldorigin

如何在代码中使用: 在viewDidLoad函数中

sceneView.debugOptions = [ARSCNDebugOptions.showWorldOrigin]

如何获得世界原点位置? 如果我了解您的要求,那么ARKit的真实世界中心就是:首次运行会​​话配置时设备的位置和方向。坐标为(0,0,0)。 [如果这对您没有意义,请告诉我(我知道我在iPad上打字时跳过了很多)。]

这里是如何在现实世界的中心位置放置东西(我们知道世界的中心在坐标(0,0,0)处)

如何在代码中使用;

func addBox() {
// create a SceneKit box shape
    let box = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0)

// create a SceneKit node 
    let boxNode = SCNNode()
// attach the shape to the node
    boxNode.geometry = box
// give node a position ( this will be the real world center!
    boxNode.position = SCNVector3(0, 0, 0)

// SCNVector3 you can think of for now as SCNVector3(x,y,z)
//https://developer.apple.com/documentation/scenekit/scnvector3

// create a SceneKit scene 
    let scene = SCNScene()

// add the node as a child of the rootNode
// the root node defines the origin of the world coordinate systems for SceneKit.
//Apple Documentation states:"The world coordinate system of the view's    
//SceneKit scene directly responds to the AR world coordinate system    
//established by the session configuration."
// so ARKit and SceneKit world coordinate systems match :-)

    scene.rootNode.addChildNode(boxNode)

//add the SceneKit scene to sceneView
    sceneView.scene = scene
}

因此,我对您的第一个答案是保持定位变量。 如何在代码中使用:

let ARWorldOrigin = SCNVector3(0, 0, 0)

使用它进行所有测量

1)您是指物理屏幕的中心吗?

2)您是说摄像机视锥台的中心吗? (尝试此堆栈流页面以获取提示: Get All ARAnchors of focused Camera in ARKIT

3)遵循此stackoverflow问题的所有链接: Which measuring unit is used in SCNVector3 position for x, y and z in ARKit

希望我能以某种方式帮助您并理解您的问题:

祝您有美好的一天! 并希望ARkit编程

我们所有人都通过浏览我们所知道的东西来学习。

智能狗