Bonjour,
Après un grand nombre de transformations (dont de nombreuses rotations dans tous les sens) de la matrice modelview, j'aimerais me repositionner à l'horizontal, mais en restant au point ou je suis arrivé. Comment faire?
Bonjour,
Après un grand nombre de transformations (dont de nombreuses rotations dans tous les sens) de la matrice modelview, j'aimerais me repositionner à l'horizontal, mais en restant au point ou je suis arrivé. Comment faire?
nicoenz
http://www.medieval-fantasy-exp.com/ (ouvert à toute proposition)
Et les autres angles, tu veux les conserver aussi ? Ou seulement la position ?
Tu peux faire un gluLookAt en reprenant la position actuelle pour te remettre droit. Ou bidouiller directement la matrice si tu peux déterminer les deux autres axes facilement.
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
Le but de l'opération est de rester à la même position, mais de réinitialiser l'angle pour tracer un segment à l'horizontal. Malheureusement, gluLookAt calcule par rapport à l'angle actuel (je viens de tester, merci quand même).
Voilà ce qui se passe dans mon programme (je dessine un arbre) :
1. J'initialise la matrice
2. J'opère un grand nombre de rotations et de translations les une derrière les autres et je trace des cylindres entre chaques points (branches). (ça marche)
3. J'aimerais tracer à l'endroit où je suis arrivé un polygone (feuille) sur le plan horizontal.
Il faudrait soit que je puisse réinitialiser l'angle, soit que je puisse récupérer les coordonnées du point que j'ai atteint au moment où je veux tracer la feuille.
Bien sûr, je pourrais recalculer les coordonnées de ce point au fur et à mesure, mais étant donné qu'il peut y avoir plusieurs milliers de rotations/translations ça prendrait beaucoup de ressources et par ailleurs, ça serait d'autant plus stupide que c'est probablement ce que fait opengl (en hardware). Il doit exister un moyen de retrouver les coordonnées du points d'arrivé. Probablement une opération sur la matrice.
nicoenz
http://www.medieval-fantasy-exp.com/ (ouvert à toute proposition)
en remettant la partie rotation/scale de la matrice à l'identité ca doit marcher. par contre, il va falloire le faire à la main
* Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
* pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
Mes articles
Récupérer les 3 premières composantes de la 4ème colonne de la matrice model-view devrait faire l'affaire, pour récupérer la position actuelle.
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
Amusant, je venais d'en arriver à la même conclusion par des tests
En tout cas merci. Je vais essayer de mettre ça en pratique .
A+
nicoenz
http://www.medieval-fantasy-exp.com/ (ouvert à toute proposition)
Voilà, donc ça marche. Voici comment je fais :
// je sauvegarde la matrice initiale dans matrix0
// je fais mes traitements
// en dessous je restaure mes angles
glGetFloatv(GL_MODELVIEW_MATRIX,matrixP);
matrix0[12] = matrixP[12];
matrix0[13] = matrixP[13];
matrix0[14] = matrixP[14];
glLoadMatrixf(matrix0);
Merci pour votre aide. J'espère que cette solution est aussi optimale que possible car l'opération est exécutée un très grand nombre de fois !
nicoenz
http://www.medieval-fantasy-exp.com/ (ouvert à toute proposition)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager