2017-07-07 4 views
0

Je veux qu'un nœud que j'ajoute à ma scène pointe vers le nord. Je reçois les données d'en-tête de l'emplacement principal, ce qui représente la direction à laquelle le périphérique est actuellement confronté au moment où ma scène a été créée (et donc la direction de mon nœud racine), puis j'ajoute l'en-tête à mes nouveaux eulerAngles.y pour le faire pivoter afin qu'il soit orienté vers le nord.Le «cap» du nœud racine d'ARSCNView ne correspond pas au cap du dispositif

func renderer(_ renderer: SCNSceneRenderer, didRenderScene scene: SCNScene, atTime time: TimeInterval) { 
    if sceneNode == nil, 
     let heading = self.locationManager.heading { 
     sceneNode = SCNNode() 
     sceneNode.eulerAngles.y += Float(heading).degreesToRadians 
     sceneView.scene.rootNode.addChildNode(sceneNode) 
    } 
} 

L'information de cap est correct, et par rotation de façon qui fait beaucoup tourner par la quantité nécessaire, en supposant que le titre est le même sens que mon nœud racine est confronté. Mais je constate que la direction de mon nœud racine n'est pas équivalente à l'endroit où se trouve le cap du périphérique, et peut parfois être sauvagement désactivée. Cela signifie que l'hypothèse que le titre est le même que le «titre» du nœud de la scène est incorrecte, et que je dois savoir à quelle distance du titre il est, pour pouvoir le corriger correctement dans mon sceneNode.

+1

Qu'est-ce que [world alignment] (https://developer.apple.com/documentation/arkit/arsessionconfiguration.worldalignment) utilisez-vous pour la configuration de votre session? – rickster

+0

@rickster Ah. Ouais, c'était ce que je cherchais, si vous voulez ajouter ça comme réponse. – Andrew

Répondre

1

Modifiez la configuration de votre session worldAlignment en .gravityAndHeading. Avec l'alignement .gravity par défaut, il n'y a pas de référence absolue pour l'endroit où les axes x et z du point de repère du monde AR - leurs directions sont basées sur l'orientation initiale de votre périphérique au démarrage de la session. Avec l'option .gravityAndHeading, les axes x et z sont alignés sur les directions de la boussole, ce qui vous permet d'orienter le contenu en toute sécurité par rapport aux directions de la boussole.