2017-08-22 3 views
1

J'essaie de faire quelque chose de simple et je suis confronté à un problème qui brise l'expérience ARKit.Comment attacher un SCNNode fixé au pointOfView d'ARKit?

Je souhaite attacher un modèle 3D (SCNNode) fixé à un emplacement sur l'écran du téléphone. Je suis capable de faire cela, mais l'expérience semble brisée pour le moment. Lorsque j'ajoute mon noeud à la scène, mon noeud a environ une seconde pour se déplacer avant qu'il ne se bloque. Ce mouvement initial est vraiment mauvais car le nœud peut se figer hors de la vue de la caméra (donc vous ne le voyez pas sur l'écran).

Le code J'utilise:

let scene = SCNScene(named: "resources.scnassets/model.scn")! 
let node = scene.rootNode.childNode(withName: "model", recursively: true)! 

// this puts the node in front & slightly below the camera 
let orientation = SCNVector3(x: 0, y: -0.4, z: -1) 

node.position = orientation 

let physicsBody = SCNPhysicsBody(
    type: .static, 
    shape: SCNPhysicsShape(geometry: SCNSphere(radius: 0.1)) 
) 
node.physicsBody = physicsBody 

sceneView.pointOfView?.addChildNode(node) 

Ce code est simple, il ajoute le nœud devant le nœud de la caméra de la scène. Mais je suis confronté au problème où, lorsque le nœud est ajouté à la scène, il a une seconde pour se déplacer sur l'écran (comme je déplace le téléphone) avant qu'il ne gèle en place. Ce que je dois faire, c'est que le nœud apparaisse sur l'écran dans un endroit fixe (fixé au point de vue de la caméra). Je ne veux pas ancrer mon nœud à un endroit dans le monde réel. Je souhaite que l'emplacement de mon nœud dépende du point de vue de la caméra.

Quelle est la bonne façon d'attacher un noeud de sorte qu'il reste au même endroit sur l'écran du téléphone?

Répondre

1

Vous devez utiliser .kinematic au lieu de .static

Utilisez corps cinématiques pour les éléments de la scène que vous souhaitez contrôler directement directement, mais dont le mouvement manipule les autres éléments. Par exemple, pour permettre à l'utilisateur de déplacer des objets avec un doigt, vous pouvez créer un corps cinématique et l'attacher à un noeud invisible que vous déplacez pour suivre des événements tactiles.