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
Vous pouvez multiplier votre matrice actuelle par une matrice de rotation. Jetez un oeil à http://en.wikipedia.org/wiki/Rotation_matrix
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.
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 –
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.
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:
Cette page a un peu d'informations utiles:
http://knol.google.com/k/matrices-for-3d-applications-translation-rotation
- 1. OpenGL Rotation
- 2. Rotation 3D en OpenGL et rotation locale
- 3. problème de rotation opengl
- 4. C++/OpenGL - Rotation d'un rectangle
- 5. Rotation d'un cube (en utilisant opengl - Iphone)
- 6. Matrices de matrices en Perl
- 7. Rotation de la scène OpenGL sur 2 axes
- 8. Comment obtenir la taille actuelle d'une pile de matrices dans OpenGL?
- 9. Matrices en Python
- 10. Matrices limitées dans Ruby
- 11. Ajout de matrices en C#?
- 12. Rendu OpenGL L-System
- 13. OpenGL tourne autour d'un point
- 14. BufferedImage Rotation
- 15. Rotation UIButtonTypeDetailDisclosure
- 16. OpenGL à OpenGL-ES - glBegin();
- 17. Windows Grossissement API, .NET et matrices
- 18. matrices multiples dans Matlab sans récursion
- 19. critères d'information pour les matrices de confusion
- 20. Conversion Matrix Market en CRS (matrices creuses)
- 21. Coulée entre les matrices multidimensionnelles et monodimensionnelles
- 22. Combine deux matrices sur une touche?
- 23. SWIG Lua et matrices de passage
- 24. Comparaison de deux matrices dans Matlab
- 25. Accès aux variables d'état OpenGL dans Cg
- 26. OpenGL Alpha Stack
- 27. ListBox List Rotation
- 28. Rotation du zoom profond
- 29. UIImage Rotation degrés personnalisés
- 30. C# Rotation de l'image
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? –
@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
Im essayant fondamentalement de recréer la fonctionnalité de glRotate –