Penso questa immagine spiega meglio il mio problema:Come faccio a ruotare alcune lune attorno a un pianeta con THREE.js?
Prima traduco la casella lungo la linea rossa. Successivamente, voglio che l'effetto di rotazione sia la linea blu in a
, ma ciò che sta effettivamente accadendo è più simile alla linea blu in b
. Sembra che cambiare la rotazione sia sempre relativa allo spazio dell'oggetto originale, ma la traduzione (nonostante si verifichi prima) è sempre relativa al genitore, e non influisce realmente sui punti geometrici in relazione allo spazio dell'oggetto. Mi scuso se questo è confuso; chiaramente sono nuovo in questo.
La parte importante del codice che produce questo effetto è di seguito. Si prega di tenere presente che l'orientamento dell'immagine è diverso da quello prodotto da questo codice; l'immagine è solo un esempio per mostrare chiaramente l'effetto.
var objectContainer = new THREE.Object3D();
var tubeRadius = 100;
var tubeGeometry = new THREE.CylinderGeometry(tubeRadius, tubeRadius, tubeRadius * 3, 36, 1, false);
var tube = new THREE.Mesh(tubeGeomtry, material);
scene.add(tube);
var boxes = new THREE.Object3D();
var boxEdge = 50;
var boxGeometry = new THREE.CubeGeometry(boxEdge, boxEdge, boxEdge);
var box1 = new THREE.Mesh(boxGeometry, material);
box1.translateX(tubeRadius + boxEdge/2 + 5);
box1.translateY(boxEdge/2);
box1.rotation = new THREE.Vector3(0, 2*Math.PI/3*0, 0);
boxes.add(box1);
var box2 = box1.clone();
box2.rotation = new THREE.Vector3(0, 2*Math.PI/3*1, 0);
boxes.add(box2);
var box3 = box1.clone();
box3.rotation = new THREE.Vector3(0, 2*Math.PI/3*2, 0);
boxes.add(box3);
scene.add(boxes);
L'unica soluzione che viene in mente è quello di avvolgere ogni casella in un altro spazio oggetto e ruotare a tale proposito, ma sembra che il lavoro eccessivo. Qual è il metodo preferito per ottenere il risultato che sto cercando?
Non conosco Three.js, ma per quanto riguarda la semplice traduzione da 'Math.cos (rotazione) * boxEdge/2, Math.sin (rotazione) * boxEdge/2' e rotazione locale? – Ryan
Sembra doppio lavoro, ruota e traduce ogni scatola. Veramente quello che voglio fare è ruotare ogni clone sullo stesso punto, che è l'origine prima della traduzione. –