Problème de rotation

Résolu
F0ra Messages postés 111 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 29 décembre 2008 - 12 août 2008 à 01:00
SebLinck Messages postés 212 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 23 juin 2011 - 13 août 2008 à 09:40
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

F0ra Messages postés 111 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 29 décembre 2008
12 août 2008 à 19:36
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();
3
SebLinck Messages postés 212 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 23 juin 2011
12 août 2008 à 09:17
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.
0
F0ra Messages postés 111 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 29 décembre 2008
12 août 2008 à 09:42
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.
0
zaibacker Messages postés 97 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 24 janvier 2018
12 août 2008 à 09:48
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
F0ra Messages postés 111 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 29 décembre 2008
12 août 2008 à 09:50
oui, je calcule le milieu entre 2 points
0
F0ra Messages postés 111 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 29 décembre 2008
12 août 2008 à 09:50
oui, je calcule le milieu entre 2 points pour
0
F0ra Messages postés 111 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 29 décembre 2008
12 août 2008 à 09:50
oui, je calcule le milieu entre 2 points pour avoir
0
F0ra Messages postés 111 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 29 décembre 2008
12 août 2008 à 09:50
oui, je calcule le milieu entre 2 points pour avoir le
0
F0ra Messages postés 111 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 29 décembre 2008
12 août 2008 à 09:53
ha la la, il faudrait supprimer tout ça dsl
0
cs_Lucky92 Messages postés 180 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 16 août 2012 2
12 août 2008 à 19:33
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));
0
SebLinck Messages postés 212 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 23 juin 2011
13 août 2008 à 09:40
lol

Cordialement,
Sébastien.
0
Rejoignez-nous