2009-02-12 6 views
1

J'ai une classe qui contient une matrice 4x4 pour la mise à l'échelle et les translations. Comment pourrais-je implémenter des méthodes de rotation à cette classe? Et devrais-je mettre en œuvre la rotation en tant que matrice séparée?Matrices Rotation & OpenGL

Répondre

3

Vous pouvez multiplier votre matrice actuelle par une matrice de rotation. Jetez un oeil à http://en.wikipedia.org/wiki/Rotation_matrix

+0

ah donc je ne généreraient une matrice de rotation et multiplier avec la matrice actuelle plutôt que de stocker 2? Comment pourrais-je générer une matrice de rotation si un vecteur xyz est mis en rotation en 3 dimensions? –

+0

@Nowell, Que voulez-vous dire? Selon votre structure, créez une matrice pour la rotation et multipliez-la par votre matrice source. Ou, vous pouvez appliquer la multiplication directement sur votre matrice. – strager

+0

Im essayant fondamentalement de recréer la fonctionnalité de glRotate –

1

Il ya un site que j'utilise chaque fois que j'ai besoin de rechercher les détails d'une transformation 3D, appelée http://www.euclideanspace.com. La page particulière sur les rotations matricielles peut être trouvée here.

Édition: Rotation autour d'un axe donné, voir la représentation axis & angle. Cette page contient également des liens vers une description de la manière de traduire une représentation en une autre.

Si vous devez tourner autour de plusieurs axes, multipliez simplement les matrices correspondantes.

+0

hmm qui me dit comment tourner dans x y ou z axe, ou faire pivoter un vecteur d'un angle, mais pas comment faire pivoter x y et z azis tout à la fois donné un vecteur –

1

En réponse à la seconde moitié de la question, une seule matrice 4x4 est parfaitement capable de contenir une mise à l'échelle, une translation et une rotation. Donc, sauf si vous avez mis des limitations spéciales sur ce genre de matrices 4x4 que vous pouvez gérer, un seul 4x4 est une amende pour ce que vous voulez. En ce qui concerne la rotation autour d'un vecteur arbitraire (comme vous le demandez dans les commentaires), regardez la section "Rotation sur un vecteur arbitraire" dans l'article de Wikipédia auquel yabcok renvoie. Vous voudrez l'étendre à une matrice 4x4 en la remplissant de zéros, sauf pour la position 4,4 (mise à l'échelle), qui devrait être une. Utilisez ensuite la multiplication matricielle avec votre scaling/translation 4x4 pour générer une nouvelle matrice 4x4.

0

Vous voulez vous assurer de trouver une référence qui parle du bon type de matrice utilisée pour l'infographie (à savoir les coordonnées 3D homogènes utilisant une matrice de transformation 4x4 pour la rotation/translation/inclinaison).

Voir une infographie "bible" tels que Foley and Van Dam (pg. 213), ou l'un de ces: