2017-10-10 4 views
0

Comme nous pouvons le voir sur la photo ci-dessous, il y a plusieurs nœuds dans le graphe de scène. L'exigence est que je veux ajouter ces nœuds dans un nœud comme indiqué dans l'image2. Ainsi, dans le graphique de la scène, je vais avoir un nœud (président) qui contiendra plusieurs noeudsComment joindre plusieurs nœuds à un nœud dans la scène iOS

enter image description here

     Image1 

enter image description here

    Image2 

Répondre

1

Mes suggestions seraient:

  • statiquement : Créez un nouveau fichier .scn dans lequel vous faites glisser & Dynamiquement: Créez un nouveau noeud SCN. Pour chaque nœud que vous essayez de regrouper, utilisez la méthode .addChildNode

J'ai utilisé le second plusieurs fois pour créer des scènes dynamiques en utilisant ARKit. Travaillé comme un charme.

Fondamentalement, j'ai ajouté tous les Childs de mon dossier .dae à un SCNNode:

var node = SCNNode() 
let scene = SCNScene(named: "myScene.dae") 
var nodeArray = scene.rootNode.childNodes 

for childNode in nodeArray { 
    node.addChildNode(childNode as SCNNode) 
} 

Vous devriez essayer avec vos fichiers, en utilisant la même méthode .addChildNode :)

+0

Pourriez-vous s'il vous plaît partager le code pour l'approche dynamique –

+0

@Ankitgarg vérifier ma réponse mise à jour :) –

2

Vous créez un nœud parent, puis ajoutez tous vos nœuds en tant qu'enfants.

-à-dire:

var nodes: [SCNNode] = getMyNodes() 

var parentNode = SCNNode() 
parentNode.name = "chair" 

for node in nodes { 
    parentNode.addChildNodes(node) 
} 

Lorsque vous appliquez une mise à jour d'un noeud, la mise à jour est également poussé vers le bas pour les enfants, par exemple:

parentNode.transform = SCNMatrix4MakeTranslation(0, 0.5, 1.2) 

appliquera la même transformation de traduction à tous les enfants attachés à parentNode.

Vous pouvez accéder à un enfant en particulier en utilisant:

parentNode.childNode(withName: nameOfChildNode, recursively: true) 

et obtenir le parent d'un enfant à l'aide:

myChildNode.parent 

EDIT:

Si vous importez à partir d'un fichier de scène, vous pouvez toujours accéder facilement à vos nœuds par programme:

let scene = SCNScene(named: "myScene.scn") 

func getMyNodes() -> [SCNNode] { 
    var nodes: [SCNNode] = [SCNNode]() 
    for node in scene.rootNode.childNodes { 
     nodes.append(node) 
    } 
    return nodes 
} 

ce qui, incidemment, signifie que vous pouvez ignorer la plupart de ce qui précède et utiliser comme le nœud parent.