将ARKit与ARWorldTrackingConfiguration一起使用时,是否可以读取当前的6个自由度运动值(例如,平移和旋转矢量)?
我指的是ARWorldTrackingConfiguration,它的6个自由度如https://developer.apple.com/documentation/arkit/arworldtrackingconfiguration所述
我想获取相对于原点(例如AR session 的起点)的设备移动的当前值,例如平移和旋转矢量。
最佳答案
let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = .horizontal
arSceneView.session.run(configuration)
这将为您提供6DOF。只要确保在走动之前检测到飞机即可。
您可以使用触摸位置在ARKit场景中移动对象。您可以进行光线跟踪以实现此目的。这一切都可以在您通过相机检测到的水平面上完成,仅此而已。
let hitResult = sceneView.hitTest(touchLocation, types: .existingPlane)
这个hitResult数组将帮助您放置对象。
例如。
let velocity :CGPoint = recognizer.velocity(in: self.arSceneView)
self.objectModel.node.position.y = (self.objectModel.node.position.y + Float(velocity.y * -0.0001))
就是您的翻译。
让翻译=识别器。翻译(在:识别器。视图!)
let x = Float(translation.x)
let y = Float(-translation.y)
let anglePan = (sqrt(pow(GLKMathDegreesToRadians(x),2)+pow(GLKMathDegreesToRadians(y),2)))
var rotationVector = SCNVector4()
rotationVector.x = -y
rotationVector.y = x
rotationVector.z = 0
rotationVector.w = anglePan
self.objectModel.node.rotation = rotationVector
self.sphereNode.rotation = rotationVector
多数民众赞成在SceneKit中的模型上旋转。这些只是如何在ARScene中进行平移和旋转的示例。根据需要进行更改。
arSceneView.pointOfView是您的相机。该节点的旋转和位置变换应为您提供设备的位置和旋转。
arSceneView.pointOfView?.transform // Gives you your camera's/device's SCN4Matrix transform
arSceneView.pointOfView?.eulerAngles // Gives you the SCNVector3 rotation matrix.
arSceneView.pointOfView?.position // Gives you the camera's SCNVector3 position matrix.