J'utilise un moteur 3D appelé Electro qui est programmé en utilisant Lua. Ce n'est pas un très bon moteur 3D, mais je n'ai pas le choix en la matière.Trouver les angles de rotation X/Y/Z d'une position à une autre
Quoi qu'il en soit, j'essaie de prendre un quadrilatère plat et de le transformer pour qu'il soit dans un endroit et une orientation spécifiques. Je sais exactement où il est censé aller (c'est-à-dire que je connais les sommets précis où les coins devraient se terminer), mais je suis en train de faire un crochet pour le faire tourner au bon endroit.
Electro ne vous permet pas d'appliquer des matrices de transformation. Au lieu de cela, vous devez transformer les modèles en utilisant l'échelle intégrée, la position (c'est-à-dire, traduire) et les fonctions de rotation. La fonction de rotation prend un objet et 3 angles (en degrés):
E.set_entity_rotation(entity, xangle, yangle, zangle)
La documentation n'Indique combien pas, mais après avoir regardé par la source Electro, je suis raisonnablement certain que la rotation est appliquée afin de rotation X -> rotation Y -> rotation Z Ma question est la suivante: Si mon objet de départ est un quadrilatère plat situé sur le plan XZ centré à l'origine, et la position de destination est dans un endroit différent et l'orientation où les sommets de destination sont connus, comment pourrais-je utiliser Electro? fonction de rotation pour le faire pivoter dans la bonne orientation avant de le déplacer au bon endroit?
J'ai creusé mon cerveau pendant deux jours en essayant de comprendre cela, en regardant des maths que je ne comprends pas en traitant des angles d'Euler et autres, mais je suis toujours perdu. Quelqu'un peut m'aider?
Oui, l'orientation finale est arbitraire. Il n'y a pas grand chose d'autre à savoir que ça. J'ai également regardé à fond à travers l'Electro PI pour trouver tout ce qui pourrait aider. La fonction set_entity_position() est une rotation absolue. Cependant, je viens de me rappeler qu'il existe une fonction de rotation relative turn_entity. Cela pourrait aider, car cela me permettrait d'appliquer des rotations dans l'ordre que je veux, bien que les rotations se feront le long des axes du cadre de référence, pas des axes locaux de l'objet. Hmmm ... –
Cool. Peut-être que cela fonctionnera: Trouver des angles de rotation autour des axes X et Y qui feraient coïncider la normale de la source avec la normale de la destination.Étant donné que le quad source source est partiellement aligné, trouvez l'angle de rotation qui entraînerait la torsion du quadrant afin qu'il s'aligne complètement avec le quad cible. Puis appliquez les angles dans l'ordre Z, X, Y. –
... Pourriez-vous ajouter un set_entity_basis ou quelque chose? –