2016-10-31 4 views
0

ich ein three.js Projekt, wo ich in 100 Maschen hinzugefügt, die in 10 Szenen unterteilt sind:Rotating geschleift Maschen Ergebnisse unerwartet

//add 100 meshes to 10 scenes based on an array containing 100 elements 
    for (var i = 0; i < data.length; i++) {  
     mesh = new THREE.Mesh(geometry, material);  
     //random positions so they don't spawn on same spot 
     mesh.position.x = THREE.Math.randInt(-500, 500); 
     mesh.position.z = THREE.Math.randInt(-500, 500); 

Sie sind durch eine Schleife hinzugefügt, und alle diese Maschen sind auf 10 Szenen zugeordnet:

// Assign 10 meshes per scene. 
var sceneIndex = Math.floor(i/10); 
scenes[sceneIndex].add(mesh); 

ich schrieb auch eine Funktionalität, wo ich ein Netz um die Mitte der Szene drehen kann.

Aber ich weiß nicht, wie man die Rotationsfunktionalität auf alle Netze anwendet, während man sie immer noch in ihre entsprechenden Szenen unterteilt. Das klingt wahrscheinlich viel zu vage, so dass ich eine fiddle habe, die den gesamten relevanten Code enthält.

Wenn Sie diese beiden Zeilen zurückkommen, sehen Sie, dass die Meshes alle nach scenes[0] gehen, und alle drehen sich gut, wie ich es wollte, aber ich brauche sie immer noch in ihren einzelnen Szenen.

spinningRig.add(mesh); 
scenes[0].add(spinningRig); 

Wie soll der Code aussehen? Waht ist die Logik dazu?

Antwort

2

Die Logik ist ziemlich einfach. Das einfachste Format wäre eine separate spinningRig für jede Szene - im Wesentlichen eine Gruppierung der Meshes für jede Szene.

Wenn Sie jede Szene erstellen, werden Sie auch eine spinningRig erstellen und fügen Sie + zuweisen es zu dieser Szene:

// Setup 10 scenes 
for(var i=0;i<10;i++) { 
    scenes.push(new THREE.Scene()); 

    // Add the spinningRig to the scene 
    var spinningRig = new THREE.Object3D(); 
    scenes[i].add(spinningRig); 

    // Track the spinningRig on the scene, for convenience. 
    scenes[i].userData.spinningRig = spinningRig; 
} 

Dann stattdessen die Maschen direkt auf die Szene hinzuzufügen, fügen sie dem spinningRig für die Szene:

var sceneIndex = Math.floor(i/10); 
scenes[sceneIndex].userData.spinningRig.add(mesh); 

Und schließlich, drehen Sie den spinningRig zum current zugeordnet:

currentScene.userData.spinningRig.rotation.y -= 0.025; 

Siehe jsFiddle: https://jsfiddle.net/712777ee/4/

+0

Vielen Dank für die Bereitstellung mir nicht nur mit der Antwort, sondern auch die Erklärung. – Zhyohzhy

Verwandte Themen