J'implémente une arcball avec openGL (on cpp). Dites, j'ai un objet au centre du système d'axes et je veux tourner plusieurs fois en fonction des axes (du monde) d'origine. Mais, après la première rotation, les axes sont modifiés et toutes les autres rotations se passent mal. Des idées? Merci.Préserver le système d'axe d'origine tout en tournant avec openGL
Répondre
Je devais faire la même chose moi-même dans une application OpenGL ES, que je décris dans un article à ce sujet here. L'approche brute d'origine lire la matrice actuelle de vue du modèle et manipulé pour produire l'effet désiré:
GLfloat currentModelViewMatrix[16];
glGetFloatv(GL_MODELVIEW_MATRIX, currentModelViewMatrix);
glRotatef(xRotation, currentModelViewMatrix[1], currentModelViewMatrix[5], currentModelViewMatrix[9]);
glGetFloatv(GL_MODELVIEW_MATRIX, currentModelViewMatrix);
glRotatef(yRotation, currentModelViewMatrix[0], currentModelViewMatrix[4], currentModelViewMatrix[8]);
Cela fonctionne, mais il faut savoir que les deux appels glGetFloatv()
va ralentir le processus de rendu en arrêtant le pipeline. J'ai depuis remplacé ce code avec des calculs que j'effectue sur ma propre copie interne de la matrice de vue de modèle, puis j'écris simplement la matrice de vue de modèle manipulée en interne après chaque rotation. Cela supprime le besoin de faire les opérations de lecture de matrice coûteuses.
Fournissez l'objet avec ses propres axes d'orientation (matrice modelview), puis multipliez-le par les matrices de rotation. Consultez Wikipédia pour savoir comment construire des matrices de rotation.
J'utilise la fonction glRotatef() pour les rotatins. Que voulez-vous dire "propres axes d'orientation"? – Sanich
Vous n'utilisez pas de shaders alors, désolé j'aurais dû demander. Souhaitez-vous pousser/sauter la pile de matrice pour chaque appel de glRotate? – cmannett85
Ajouter xAngle et yAngle à la matrice actuelle.
Matrix.rotateM(matrix, 0, xAngleADD, matrix[1], matrix[5], matrix[9]);
Matrix.rotateM(matrix, 0, yAngleADD, matrix[0], matrix[4], matrix[8]);
gl.glMultMatrixf(matrix, 0);
- 1. openGL tournant avec le problème d'éclairage
- 2. Préserver tout en ajoutant précédente nouvelle sur un formulaire
- 3. Modification du système d'axes OpenGL
- 4. Confusion du système OpenGL Coordinate
- 5. Préserver l'intégrité relationnelle avec Mnesia
- 6. Préserver le GLBlendFunc
- 7. Ajax demande GET tournant en demande OPTION
- 8. Comment animer un cube tournant en C#?
- 9. Préserver les espaces avec Pygments
- 10. iphone boussole tournant en fonction de l'orientation
- 11. Rotation OpenGL ES dans le système de coordonnées fixes
- 12. Crash impliquant UISearchDisplayController tournant?
- 13. Problème de boussole javascript tournant avec angle - rotation/translation
- 14. Tout système de cache distribué permettant de baliser le contenu?
- 15. économiseur d'écran Xcode avec openGL
- 16. AuthLogic - comment déterminer l'ID utilisateur actuel dans tout le système?
- 17. écran Désactiver tournant sur Android
- 18. Exécution d'un code avant le démarrage de tout système d'exploitation?
- 19. HP-UX préserver le propriétaire du fichier avec cpio
- 20. Aide tournant dans le script jQuery un plugin
- 21. Affichage vidéo avec openGL
- 22. Implémentation d'un système de coordonnées fixes dans OpenGL
- 23. Forcer urlparse.urlsplit à préserver le casse
- 24. Problème avec le plein écran OpenGL sur le Mac
- 25. Activité de manipulation tournant dans Android
- 26. Essayer de créer un ticker "testimonial" tournant avec AJAX/JQuery
- 27. Incrustation en niveaux de gris avec OpenGL?
- 28. Mappage de texture en OpenGL (avec SOIL)
- 29. Dessin 3D en Python avec OpenGL
- 30. extrait tout en obtenant le '-'
Qu'est-ce que c'est «openPG»? – genpfault
Les quaternions sont une bonne solution pour 'Gimbal lock' – sje397