我有一个sceneView
我加载了一个3D模型。模型显示正常,我可以控制它触摸屏幕。
我需要的是在3D模型旋转时获得X,Y,Z旋转的值。
我怎样才能实时获得这些值?
我尝试使用手势识别器进行相机旋转,但他们没有更新。
override func viewDidLoad() {
super.viewDidLoad()
sceneView.scene = SCNScene(named: "PKB2");
sceneView.autoenablesDefaultLighting = true
sceneView.allowsCameraControl = true
// add a tap gesture recognizer
let tapGesture = UITapGestureRecognizer(target: self, action:
#selector(handleTap(_:)))
sceneView.addGestureRecognizer(tapGesture)
}
func handleTap(_ gestureRecognize: UIGestureRecognizer) {
// retrieve the SCNView
let cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
print(cameraNode.rotation)
}
答案 0 :(得分:2)
在handleTap(_:)
你正在创建新相机。此摄像机的位置和旋转(或包含摄像机的节点的旋转)与用于渲染场景的摄像机的旋转无关。
当您在视图上将allowsCameraControl
设置为true
时,SceneKit正在创建一个用户可以通过触摸事件控制的新相机。
您可以使用SCNSceneRenderer
符合SCNView
协议的pointOfView
属性来获取当前用于呈现视图的相机的节点。
func handleTap(_ gestureRecognize: UIGestureRecognizer) {
let cameraNode: SCNNode? = sceneView.pointOfView
print(cameraNode?.rotation ?? "There is no camera set to the view")
}