THREE.js: Pouvez-vous forcer un ordre d’opérations différent pour les trois.js?

Voir cette question: Threejs Transform Masortingx ordering

Je dessine les orbites des planètes et j’ai du mal à changer les frameworks de référence inertiels (j’ai choisi d’aligner les coordonnées du monde three.js sur le cadre de référence inertiel de la planète visualisée). Mais je dois forcer three.js à appliquer les opérations dans l’ordre indiqué ci-dessous pour que l’orbite soit correctement affichée (actuellement, l’orbite rest au monde (0,0,0) et tourne follement).

La façon normale (physique) de faire cela est de procéder comme suit: 1. position zéro et rotation de l’ellipse.

ellipse.position.set(0,0,0); ellipse.rotation.set(0,0,0); 

2. Appliquer la masortingce de cosinus de direction (masortingce qui modifie le cadre de référence).

 ellipse.applyMasortingx(DCM); 

3. Traduisez l’orbite pour qu’elle soit centrée sur le corps en orbite, où r est le vecteur rayon de la planète.

 ellipse.translateX(rx); ellipse.translateY(ry); ellipse.translateZ(rz); 

4. Faites pivoter l’ellipse.

 ellipse.rotateZ(RAAN); // RAAN : right angle of ascending node ellipse.rotateX(inc); // inc : orbit inclination ellipse.rotateZ(ArgP); // ArgP : Argument of Periapsis. 

5. Ajustez la différence entre le centre et le point focal.

 ellipse.translateX(-c); 

6. Bénéfice.

Par conséquent, je ne sais pas s’il existe une sorte de stream de commande dans three.js avec lequel je ne suis pas familier ou si node.js est à l’origine de problèmes asynchrones.

D’accord. Je viens de poster ceci, mais j’ai trouvé la solution pour tous ceux qui ont le même problème à l’avenir. Si vous souhaitez appliquer des opérations dans un ordre d’opérations différent de celui que vous souhaite appliquer à Three.js (voir l’article suivant: Ordre de transformation de Threejs Transform Masortingx ). Ensuite, vous devez utiliser la fonction applyMasortingx entre chaque opération que vous souhaitez effectuer dans un ordre spécifique.

En utilisant ce qui précède comme exemple:

 ellipse.position.set(0,0,0); ellipse.rotation.set(0,0,0); ellipse.updateMasortingx(); ellipse.applyMasortingx(DCM); ellipse.updateMasortingx(); ellipse.translateX(rx); ellipse.translateY(ry); ellipse.translateZ(rz); ellipse.updateMasortingx(); ellipse.rotateZ(RAAN); // RAAN : right angle of ascending node ellipse.rotateX(inc); // inc : orbit inclination ellipse.rotateZ(ArgP); // ArgP : Argument of Periapsis. ellipse.updateMasortingx(); ellipse.translateX(-c); ellipse.updateMasortingx();