2010-10-11 28 views
2

Je construis un moteur 3D rapide pour un jeu que je développe.Comment les moteurs 3D gèrent-ils généralement la rotation des objets? (Illustré)

Actuellement je gère la rotation d'objets 3D en tournant autour de l'axe global Y, X puis Z. Est-ce la bonne façon de le faire, ou devrais-je faire tourner des objets autour de son axe local?

Que recommandez-vous et pourquoi?

Si la méthode de l'axe local est correcte, une matrice 3D 3x3 ou 4x4 doit-elle être utilisée pour calculer correctement les rotations? Comment?

alt text http://i51.tinypic.com/2417aqc.png

Répondre

1

4x4 matrices vous donne plus de flexibilité. Par exemple, vous pouvez concaténer plusieurs transformations (translation, rotation, etc.) via la multiplication matricielle.

+0

@Jenko - J'ai omis de commenter la partie matrice 4x4 de la question, mais -yes- les matrices 4x4 sont la meilleure façon de go – Throwback1986

+0

Est-ce que les matrices 4x4 tourneraient sur l'Axe Local comme je l'ai montré? Ou retourneraient-ils des résultats comme la rotation de Global Axis? –

+1

L'ordre des termes est important quand on multiplie les matrices de transformation, donc je pense que c'est l'Axe Local. Il semble que l'ordre des opérations n'aurait pas d'importance dans la rotation de Global Axis. –

0

Qu'est-ce que vous essayez d'accomplir? Si vous voulez voir l'objet "tourner", alors les rotations doivent être effectuées autour de l'origine locale. D'autre part, la rotation autour de l'origine globale fera que l'objet "orbite" l'origine globale. Regarder la discussion concernant l'ordre de transformation here pour une illustration.

+0

Je ne parle pas d'origine, mais l'axe sur lequel je tourner. La rotation de l'axe local signifie que les plans de l'axe X/Y/Z tournent avec l'objet. La rotation de l'axe global signifie que les plans X/Y/Z ne changent pas à chaque pas. –

+0

@Jenko, les origines définissent les axes de rotation (dans le contexte de cette question, de toute façon). Si vous voulez effectuer une rotation autour de l'axe local, vous devez traduire l'objet de sorte que les rotations se produisent autour du point (0,0,0). Ceci réalise un type de rotation "en rotation". Si vous voulez tourner autour de l'axe global, alors appliquez simplement les rotations sans traduction précédente. Si vous utilisez une matrice 4x4, vous pouvez concaténer les matrices pour accomplir la translation et la rotation en une seule opération. – Throwback1986

0

Il n'y a pas vraiment correct l'ordre des rotations. Si vous faites votre propre moteur de jeu, la commande dépend vraiment de vous.

Cependant, cela ne veut pas dire que vous ne pouvez pas choisir d'être cohérent avec les autres moteurs de jeux. L'unité, par exemple, applique les rotations d'angle d'Euler dans l'ordre Z, X, Y. (source) Et je ne peux pas confirmer 100%, mais mon expérience avec Unity me porte à croire qu'il utilise des axes globaux, pas locaux.

Si vous prenez l'approche mentionnée dans d'autres réponses et concaténez des matrices de rotation 4x4, vous obtiendrez probablement un comportement d'axe local.

Mais vraiment, si vous voulez éviter tous ces problèmes, vous devriez probablement apprendre à peu près escouades ...