Je sais que la rotation 3D est bien documentée sur SO et sur de nombreux autres sites, mais en dépit de la lecture d'innombrables explications, je n'ai toujours pas compris où je me trompe. Mes antécédents sont dans l'art et le design, pas dans les mathématiques et la programmation, et je ne suis jamais vraiment certain que mon angle d'attaque (sans jeu de mots) soit le bon. Plutôt que de coller un patchwork de mon code lugubre, j'inclus une image décrivant mon problème. Ce que j'aimerais vraiment, c'est une ventilation détaillée, étape par étape, de la façon de le résoudre. Pseudo code est utile, mais je vais apprendre plus si quelqu'un va me diriger dans la bonne direction ou de souligner les pièges communs.Rotation 3D avec Axis & Angle
= Red X-Axis, Vert = axe Y, Bleu = Z-Axis
vecteurs Magenta = origine -> certains X, Y, Z Point
Magenta cube = moyenne des extrémités des deux vecteurs magenta (y a-t-il un meilleur nom pour cela?)
Vecteur blanc = produit croisé des deux vecteurs magenta ay, vecteur est normalisée)
objet cube cyan = rotation échoue
Je l'ai déjà utilisé Away3D et Papervision; dans ces bibliothèques, l'application d'angles d'Euler aux propriétés rotationX, rotationY ou rotationZ d'un objet fera tourner l'objet localement, comme s'il était à l'origine quelle que soit sa position réelle. Avec Three.js, ce n'est pas le cas. La modification des propriétés rotation.x et rotation.y d'un objet produit un effet bizarre lorsque l'objet incline apparemment un bit sur l'axe Z. Encore plus déroutant est que cela se produit lorsque l'objet repose à l'origine. Je pensais que l'utilisation de fonctions Quaternion -> Matrix ou Axis/Angle -> Matrix résoudrait mon problème, mais pas de dés. Il semble qu'il y ait un concept de base que je ne reçois pas.
Quoi qu'il en soit, ce que je voudrais faire est d'orienter le cube vers le vecteur produit croisé (blanc), de sorte que le haut du cube soit orienté dans la direction de ce vecteur. Ensuite, j'aimerais faire tourner le cube sur le même axe. L'image que j'ai attachée montre le résultat de plus d'heures que je voudrais admettre essayant d'atteindre ce résultat. Mon code ressemble vaguement comme ceci:
axis = Vector3.cross(a, b)
axis.normalize()
angle = 45 * TO_RADIANS;
quat = AxisAngle2Quaternion(axis, angle)
rot = Quaternion2Matrix(quat)
cube.matrix = rot
Merci à l'avance,
Casey
Edit: Démarrage d'une prime
Peut-être que je comprends mal comment cela est censé travail. Voici une autre image:
Ai-je raison de penser que ce vecteur magenta est l'axe, et les flèches orange indiquent la rotation autour de cet axe en fonction de l'angle? D'une manière ou d'une autre, je veux orienter le cube cyan basé sur un vecteur directionnel et le faire tourner. Qu'est-ce que je fais mal!?
Personne ne réagit, mais je pense en fait, que votre question est des meilleurs formulés que j'ai vus ici jusqu'à présent. Peut-être que personne ne le sait? Je serais également curieux de voir une réponse ici. – erikbwork
Peut-être qu'ils sont loin de l'aspect Three.js ... Je m'attendais à ce que ce soit un problème assez basique – Casey
J'ai pu me rapprocher avec la méthode "Utils3D.pointTowards()" dans Flash: http: // help. adobe.com/fr/US3LCR/Flash_10.0/flash/geom/Utils3D.html Mais je ne sais pas comment appliquer la rotation autour de l'axe et je ne trouve pas de fonctions OSS comparables – Casey