Problème de rotation

Résolu
Signaler
Messages postés
111
Date d'inscription
mardi 18 septembre 2007
Statut
Membre
Dernière intervention
29 décembre 2008
-
Messages postés
212
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
23 juin 2011
-
Bonjour,
Je voudrais faire une rotation d’un rectangle en OpenGL.
Le problème avec glRotate, c’est assez compliqué quand on a beaucoup de rectangles.
Donc, je pense qu’avec les cos, sin, ça sera plus simple.



Voici les 4 points du rectangle :

Point A (X0,Y1)
Point B(X1,Y1)
Point C(X1,Y0)
Point D(X0,Y0)


J’ai un problème avec mes formules mathématiques. Ça ne tourne pas comme il faut.


float CX = (X0 + X1) / 2;
float CY = (Y0 + Y1) / 2;


X0 = CX+((X0 - CX)*cos(ang)  - (Y0 - CY)*sin(ang));
Y0 = CY+((X0 - CX)*sin(ang)  - (Y0 - CY)*cos(ang));


X1 = CX+((X1 - CX)*cos(ang)  - (Y1 - CY)*sin(ang));
Y1 = CY+((X1 - CX)*sin(ang)  - (Y1 - CY)*cos(ang));


Merci beaucoup
@+

11 réponses

Messages postés
111
Date d'inscription
mardi 18 septembre 2007
Statut
Membre
Dernière intervention
29 décembre 2008

j'ai trouvé la solution, tu as raison.
j'ai réalisé un petit exemple pour comprendre :

glPushMatrix();
 
glEnable(GL_TEXTURE_2D);
glEnable(GL_DEPTH_TEST);
glBindTexture(GL_TEXTURE_2D, g_Texture[99]);
 
glTranslatef(150,150,0);
glRotatef(ZZ0,0.0,.0,1.0);
glTranslatef(-150,-150,0);
 
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f(100  ,100  ,Calque);
glTexCoord2f(0.0f, 1.0f); glVertex3f(100  ,200  ,Calque);
glTexCoord2f(1.0f, 1.0f); glVertex3f(200  ,200  ,Calque);
glTexCoord2f(1.0f, 0.0f); glVertex3f(200  ,100  ,Calque);
glEnd();
 
glDisable(GL_BLEND);
glDisable(GL_TEXTURE_2D);
glDisable(GL_DEPTH_TEST);
 
glPopMatrix();
Messages postés
212
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
23 juin 2011

Salut,
C'est plus simple, mais plus compliqué, c'est ça que tu es en train de dire...
Si tu fait de la programmation OpenGL, utilise les fonctions OpenGL,
Beaucoup de rectangle, c'est combien pour toi ?
De toute facon derrière la fonction Gl Rotate, il y a une matrice de rotation,
donc les sin et cos sont utiliser mais c'est transparent pour l'utilisateur...
pour faire tourner uniquement les rectangles ( ou autre ),
regarde PushMatrice() et PopMatrice()...

Cordialement,
Sébastien.
Messages postés
111
Date d'inscription
mardi 18 septembre 2007
Statut
Membre
Dernière intervention
29 décembre 2008

Beaucoup de rectangle, c'est combien pour toi ?
et bien beaucoup...
http://neurone.artificiel.ifrance.com/swo/img6.jpg

Je connais glPushMatrix() et glPopMatrix(), le problème avec glRotate, la rotation ne se fait pas au centre. Il faudrait réaliser certainement une translation du centre avec glTranslatef
.
Je cherche donc un tutorial pour ceci ou j'utilise les cos et sin.
Messages postés
98
Date d'inscription
vendredi 17 février 2006
Statut
Membre
Dernière intervention
24 janvier 2018

salut, tu cherches à faire quoi avec la formule :
float CX = (X0 + X1) / 2;
float CY = (Y0 + Y1) / 2;
???
Là tu calcules le milieu entre 2 points.
Messages postés
111
Date d'inscription
mardi 18 septembre 2007
Statut
Membre
Dernière intervention
29 décembre 2008

oui, je calcule le milieu entre 2 points
Messages postés
111
Date d'inscription
mardi 18 septembre 2007
Statut
Membre
Dernière intervention
29 décembre 2008

oui, je calcule le milieu entre 2 points pour
Messages postés
111
Date d'inscription
mardi 18 septembre 2007
Statut
Membre
Dernière intervention
29 décembre 2008

oui, je calcule le milieu entre 2 points pour avoir
Messages postés
111
Date d'inscription
mardi 18 septembre 2007
Statut
Membre
Dernière intervention
29 décembre 2008

oui, je calcule le milieu entre 2 points pour avoir le
Messages postés
111
Date d'inscription
mardi 18 septembre 2007
Statut
Membre
Dernière intervention
29 décembre 2008

ha la la, il faudrait supprimer tout ça dsl
Messages postés
180
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
16 août 2012
2
Ton problème, c'est que tu utilises les variables que tu es en train de modifier :

X0 = CX+((X0 - CX)*cos(ang)  - (Y0 - CY)*sin(ang));
Y0 = CY+((X0 - CX)*sin(ang)  - (Y0 - CY)*cos(ang));
Messages postés
212
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
23 juin 2011

lol

Cordialement,
Sébastien.