ARWorldTrackingConfiguration

ARWorldTrackingConfiguration

将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.

08-05 23:28