2017-06-15 6 views
0

J'ai un sceneView où j'ai chargé un modèle 3d. Le modèle montre bien et je peux le contrôler en touchant l'écran. Ce dont j'ai besoin, c'est d'obtenir les valeurs de rotation X, Y, Z pendant la rotation du modèle 3D.Swift 3 - SceneKit obtenir le modèle 3D X Y Z rotation Valeur

Comment puis-je obtenir ces valeurs en temps réel?

J'ai essayé d'utiliser la rotation de caméra avec un outil de reconnaissance de gestes, mais ils ne sont pas mis à jour.

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) 

    } 

Répondre

2

Dans votre handleTap(_:) vous créez un nouvel appareil photo . La position et la rotation de cette caméra (ou la rotation du nœud contenant la caméra) n'a rien à voir avec la rotation de la caméra utilisée pour rendre la scène. Lorsque vous définissez allowsCameraControl à true sur votre vue SceneKit crée une nouvelle caméra que l'utilisateur peut contrôler avec des événements tactiles.

Vous pouvez obtenir le nœud contenant la caméra actuellement utilisée pour afficher la vue avec la propriété pointOfView du protocole SCNSceneRenderer auquel SCNView est conforme.

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

Merci .. eu. Est-il possible de désactiver uniquement la position de la caméra lorsque vous déplacez l'objet avec deux doigts? Je veux seulement la rotation et le zoom activés – SNos

+1

Pas en utilisant 'allowCameraControl'. L'équipe SceneKit voit cette propriété uniquement comme un outil de débogage. iOS 11 ajoute beaucoup de fonctionnalités utiles pour contrôler la caméra mais pour l'instant vous devez répondre manuellement aux événements et changer la position des nœuds. Cochez [this] (https://stackoverflow.com/questions/25654772/rotate-scncamera-node-looking-at-an-object-around-an-imaginary-sphere#25674762) poste comme point de départ – orangenkopf