当用户双击场景视图时,我想显示一个指针。为此,我想使用 SCNTorus 因为在某个角度它是一个圆。
let geometry = SCNTorus(ringRadius: 0.01, pipeRadius: 0.001)
let node = SCNNode(geometry: geometry)
我已经从 hitTest 获得了一个向量,我将其用作节点的位置
private func getVector(for point: CGPoint) -> SCNVector3? {
guard let hitTest = self.sceneView.hitTest(point, types: .featurePoint).first else {
return nil
}
let transform = SCNMatrix4.init(hitTest.worldTransform)
let vector = SCNVector3Make(transform.m41, transform.m42, transform.m43)
return vector
}
添加节点时,如何将其转换为始终显示为圆形。
对于沿 X 轴旋转的垂直设备位置.pi/2
效果很好,但是当设备在空间中移动时它会中断,所以我不能硬编码角度
node.eulerAngles.x = .pi / 2
sceneView.scene.rootNode.addChildNode(node)
我相信我需要以sceneView.pointOfView
某种方式应用转换。但我卡在这里。
这是完整的代码
@objc private func didDoubleTap(_ sender: UITapGestureRecognizer) {
let point = sender.location(in: sceneView)
guard let vector = getVector(for: point) else { return }
guard let pov = sceneView.pointOfView else { return }
guard let camera = sceneView.session.currentFrame?.camera else { return }
let geometry = SCNTorus(ringRadius: 0.01, pipeRadius: 0.001)
let node = SCNNode(geometry: geometry)
node.position = vector
node.eulerAngles.x = .pi / 2
sceneView.scene.rootNode.addChildNode(node)
animatePointingNode(node)
}