在ARKit中,如果我有ARSCNView,如何获取当前场景的真实中心坐标?我正在使用Swift作为编程语言。
答案 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编程
我们所有人都通过浏览我们所知道的东西来学习。
智能狗