我当前的代码库提供了方向(pitch
, yaw
, roll
) of an ARImageAnchor
与世界的关系。我想要实现的是获得ARImageAnchor
与启动会话后某个时间添加的节点相关的方向数据。
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode,
for anchor: ARAnchor) {
guard let _ = anchor as? ARImageAnchor else { return }
DispatchQueue.main.async {
let cylinderNode = SCNNode()
cylinderNode.geometry = SCNCylinder(radius: 0.05, height: 0.4)
node.addChildNode(cylinderNode)
let ea: SCNVector3 = node.eulerAngles
print(self.convert(ea.x), self.convert(ea.y), self.convert(ea.z))
}
}
任何帮助将非常感激!
你可以通过锚点orientation part
of the simd_float4x4 变换 https://stackoverflow.com/questions/45437037/arkit-what-do-the-different-columns-in-transform-matrix-represent/55695304#55695304到您的模型(请注意,此数据存储在当前会话的每个 ARFrame 中)恢复位置:
import ARKit
import SceneKit
class ViewController : UIViewController, ARSCNViewDelegate {
@IBOutlet var sceneView: ARSCNView!
var model = SCNNode()
override func viewDidLoad() {
super.viewDidLoad()
sceneView.delegate = self
sceneView.scene = SCNScene(named: "ARScene")!
model = sceneView.scene.rootNode.childNode(withName: "model",
recursively: true)!
}
@IBAction func passTransformButton(_ sender: UIButton) {
if let trans = sceneView.session.currentFrame?.anchors[0].transform {
model.simdTransform = trans // Full Transform
model.simdTransform.columns.3.x = 0 // restore position X
model.simdTransform.columns.3.y = 0 // restore position Y
model.simdTransform.columns.3.z = 0 // restore position Z
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)