2017-06-15 110 views
0

我有一个sceneView我加载了一个3d模型。模型显示正常,我可以控制它触摸屏幕。Swift 3 - SceneKit获取三维模型X Y Z旋转值

我需要的是在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) 

    } 

回答

2

在你handleTap(_:)要创建一个新的相机。本相机的位置和旋转(或包含相机的节点的旋转)与用于渲染场景的相机旋转无关。 当您在您的视图上将allowsCameraControl设置为true时,SceneKit正在创建一个用户可以使用触摸事件控制的新相机。

您可以获取包含当前用于呈现视图的节点的节点,SCNView符合SCNSceneRenderer协议的pointOfView属性。

func handleTap(_ gestureRecognize: UIGestureRecognizer) { 
    let cameraNode: SCNNode? = sceneView.pointOfView 
    print(cameraNode?.rotation ?? "There is no camera set to the view") 
} 
+0

谢谢..明白了。用两根手指移动物体时,有没有办法只禁用相机的位置?我只想旋转e变焦启用 – SNos

+1

不使用'allowsCameraControl'时。 SceneKit团队仅将该属性视为调试工具。 iOS 11增加了许多有用的功能来控制相机,但现在您必须手动响应事件并更改节点位置。检查[this](https://stackoverflow.com/questions/25654772/rotate-scncamera-node-looking-at-an-object-around-an-imaginary-sphere#25674762)作为起点 – orangenkopf

相关问题