2009-11-21 7 views
3

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?

Répondre

1

Pouvez-nous nous en dire plus sur le problème? Cela semble étrange exprimé de cette façon. Que savez-vous d'autre sur l'orientation finale que vous devez atteindre? Est-ce complètement arbitraire ou spécifié par l'utilisateur ou pouvez-vous utiliser plus de connaissances pour aider à résoudre le problème? Y a-t-il d'autres API Electro que vous pourriez utiliser pour aider?

Si vous devez vraiment résoudre ce problème général, alors c'est dommage, c'est dur, et sous-spécifié. Voici le code d'un gars qui peut work, from euclideanspace.com.

+0

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 ... –

+1

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. –

+0

... Pourriez-vous ajouter un set_entity_basis ou quelque chose? –

0

d'abord faire la traduction pour faire un coin de la quadrilatérale au point que vous souhaitez qu'il soit, puis appliquer les trois transformations de rotation successivement: euler angles

Si vous savez où le quad est, et vous savez exactement où il doit aller, et vous êtes certain qu'il n'y a pas de distorsions du quad pour l'adapter à l'endroit où il doit aller, alors vous devriez être capable de comprendre les angles en utilisant le produit scalaire vectoriel.

Si vous avez deux vecteurs, l'angle entre eux peut être calculé en prenant le produit scalaire.

+0

Malheureusement, cela n'aide pas vraiment. Ce dont j'ai besoin, ce sont des angles spécifiques. Comment trouver les angles X, Y et Z par lesquels je ferais pivoter le modèle si je le faisais pivoter d'abord par l'angle X, puis l'angle Y, puis l'angle Z? –

Questions connexes