2015-04-09 3 views
1

Je déclare mon appareil photo comme celui-ci à INIT:SceneKit a frappé erreur de test tout en passant devant la caméra

defaultCameraNode.camera = SCNCamera() 
defaultCameraNode.position = SCNVector3Make(0, 200, 500) 
defaultCameraNode.camera?.zFar = 1000.0 
defaultCameraNode.camera?.zNear = 10.0 
defaultCameraNode.camera?.xFov = 30.0 
defaultCameraNode.camera?.yFov = 30.0 
scene.rootNode.addChildNode(defaultCameraNode) 
sceneView.pointOfView = defaultCameraNode 
defaultCameraNode.constraints = [SCNLookAtConstraint(target: rootNode)] 

Après cela, dans un bloc de tapGesture je fais un test de recherche:

let hitResults = sceneView.hitTest(sender.locationInView(sceneView), options: nil) 

Ce retourne ce que je veux , a eu le noeud. Après ajouter un nouvel appareil photo et de changer le point de vue de la scène

var cameraNode = SCNNode() 
cameraNode.name = "cameraNode" 
cameraNode.position = SCNVector3Make(position.x, position.y + 50.0, position.z + Float(radius * 3)) 
cameraNode.rotation = SCNVector4Make(1, 0, 0, -atan2f(20.0, 40.0)) 

var camera = SCNCamera() 
camera.zNear = 0.0 
camera.zFar = 1000.0 
camera.xFov = 40.0 
camera.yFov = 40.0 
cameraNode.camera = camera  
node.addChildNode(cameraNode) 

SCNTransaction.begin() 
SCNTransaction.setAnimationDuration(animationDuration) 
sceneView.pointOfView = cameraNode 
SCNTransaction.commit() 

Lorsque la position de la caméra change le même test de coup je avant retourne un tableau 0 longueur et a cette erreur sur la console:

SceneKit: error, error in _C3DUnProjectPoints 

Quelqu'un peut-il m'aider à résoudre ce problème? merci

Répondre

1

J'ai commencé un nouveau projet et je l'ai compris étape par étape quand le plus mauvais se passe mal. Je ne l'ai trouvé nulle part dans la documentation Apple officielle, mais mes expériences sont les suivantes: Si vous voulez changer la position de la caméra ou toute autre propriété, vous pouvez le faire en ajoutant une nouvelle caméra à un nouveau nœud avec une nouvelle position , paramètres, etc., vous définissez la propriété PointOfView du SCNView, vous pouvez le faire animée comme ceci:

SCNTransaction.begin() 
SCNTransaction.setAnimationDuration(2.0) 
sceneView.pointOfView = cameraNode 
SCNTransaction.commit() 

Un point important: le nœud que la tenue du nouveau SCNCamera doit être ajouté à la rootView du SCNScene, sinon (Si vous l'ajoutez au childNode de rootView), le hittest vous donnera une erreur à la place du SCNNode que vous avez touché.

0

Il semble que vous définissiez un autre nœud (sur lequel aucune caméra n'est connectée) pour être le point de vue des scènes.

Regardez votre code. Le nœud auquel vous associez le nœud de caméra est cameraNode et le nœud que vous affichez est node (auquel vous ajoutez le nœud de caméra).

+0

Je l'ai corrigé dans le post, c'était une autre fonction, qui a changé la position de la caméra, mais c'est le même nœud. –