我正在进行与垂直平面相关的实验,并尝试在其上放置一个节点并使其得到正确的旋转角度。
以下是被点击的垂直平面的ARHitTestResult:
let hitLocation = sceneView.hitTest(touchPoint, types: .existingPlaneUsingExtent)
我尝试了以下方法:
let hitRotation = hitLocation.first?.worldTransform.columns.2
并且
let anchor = hitLocation.first?.anchor
let hitRotation = anchor?.transform.columns.2
两者似乎都不起作用。
我希望做的是:
boardNode.eulerAngles = SCNVector3((hitRotation?.x)!, (hitRotation?.y)!, 0)
我希望有人能帮我解决这个问题,因为我还没有找到很多关于ARKit的教程。
编辑:
以下是有效的方法(感谢Josh):
let hit = sceneView.hitTest(touchPoint, types: .existingPlaneUsingExtent)
let planeAnchor = hit.first?.anchor as? ARPlaneAnchor
guard let anchoredNode = sceneView.node(for: planeAnchor!) else { return }
let anchorNodeOrientation = anchoredNode.worldOrientation
boardNode.eulerAngles.y = .pi * anchorNodeOrientation.y
注意:在这种情况下,.worldOrientation比.rotation更准确,只是想提一下。