IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

[OpenGL] la rotation ?


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 67
    Par défaut [OpenGL] la rotation ?
    Bonjour,
    J'ai un problème pour réaliser une rotation en OpenGL au centre du rectangle.
    J'ai esayé avec glRotatef(ang,0.0,0.0,1.0); le problème l'orignie de la rotation n'est pas au centre du rectangle.
    Comment définir le centre du rectanble, ou il faut-il utiliser les cos(), sin() ; si oui comment ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    void Draw_Box(int Texture,float X0,float Y0,float X1,float Y1, int Calque, float ang)
    {
    glPushMatrix();
    // glRotatef(ang,0.0,0.0,1.0);
    glEnable(GL_TEXTURE_2D);
    glEnable(GL_DEPTH_TEST);
    glBindTexture(GL_TEXTURE_2D, g_Texture[Texture]);
     
    glBegin(GL_QUADS); 
     glTexCoord2f(1.0f, 0.0f); glVertex3f(-SCREEN_X/2+X1*cos(ang),  SCREEN_Y/2-Y1*sin(ang),  -SCREEN_X+Calque);
     glTexCoord2f(1.0f, 1.0f); glVertex3f(-SCREEN_X/2+X1*cos(ang),  SCREEN_Y/2-Y0*sin(ang),  -SCREEN_X+Calque); 
     glTexCoord2f(0.0f, 1.0f); glVertex3f(-SCREEN_X/2+X0*cos(ang),  SCREEN_Y/2-Y0*sin(ang),  -SCREEN_X+Calque);
     glTexCoord2f(0.0f, 0.0f); glVertex3f(-SCREEN_X/2+X0*cos(ang),  SCREEN_Y/2-Y1*sin(ang),  -SCREEN_X+Calque);
    glEnd();
     
    glDisable(GL_BLEND);
    glDisable(GL_TEXTURE_2D);
    glDisable(GL_DEPTH_TEST);
    glPopMatrix();
    }
    Merci Beaucoup

  2. #2
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 67
    Par défaut
    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
    @+

  3. #3
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    salut,

    pourquoi ne pas translater ton rectangle au centre de la scene avant de le faire tourner? En ramenant le centre du rectangle au centre de la scene, ca devient ton centre de rotation.

    Apres il faut jouer avec les push/popMatrix pour ne pas affecter les autres objets mais c'est quand meme plus simple que de s'amuser avec la trigo. En gros ca donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();  
    
    glPushMatrix(); // sauvegarder la matrice courante
    
    glTranslatef() // translation du rectangle pour le ramener à sa position initiale
    glRotatef(...) // rotation du rectangle
    glTranslatef() // translation du rectangle pour le ramener au centre (à faire, dans le code, APRES la rotation, mais dans les faits la rotation se fera avant car les operations matricielles se font "à l'envers")
    
    ... // dessin du rectangle
    
    glPopMatrix();
    et ca devrait marcher (fais bien gaffe que les opérations matricielles se font dans l'ordre inverse de celui d'appel)

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 67
    Par défaut
    Salut,
    Bon, je vais essayer. Ça ne va pas être simple de retrouver sa position initiale avec tous ses rectangles. Ce n’est pas gagné.
    img6.jpg
    Merci

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 67
    Par défaut
    un petit tutorial ?

  6. #6
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    un petit tutorial ?
    sur quoi? comment faire une translation ou une rotation? Si c'est ca je pense qu'il y a assez d'exemples de partout, c'est quand même l'un des 1ers trucs qu'on est "sensé" apprendre en OpenGL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ça ne va pas être simple de retrouver sa position initiale avec tous ses rectangles.
    Ta position "initiale" c'est l'origine (0,0,0). tu as deux possibilités

    1 ) si tu connais la position du centre de ton rectangle (cx, cx cz), il te suffit de faire un glTranslate(-cx, -cy, -cz) pour le ramener à l'origine

    2) si tu ne connais que les coordonnées des coins de ton rectangle, tu t'en sers pour calculer les coordonnées du centre, puis tu fais comme en 1)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. OpenGL et rotation
    Par angioedema dans le forum C++
    Réponses: 7
    Dernier message: 13/06/2013, 23h55
  2. [OpenGL] probleme rotations/ translations
    Par Daemonkii dans le forum Windows
    Réponses: 4
    Dernier message: 16/12/2007, 17h42
  3. Réponses: 2
    Dernier message: 15/06/2007, 08h49
  4. [OpenGl] Problème rotation d'un rectangle
    Par dib258 dans le forum SDL
    Réponses: 2
    Dernier message: 20/12/2006, 17h02
  5. [OpenGL] problème de rotation 3D
    Par ReiVon dans le forum OpenGL
    Réponses: 3
    Dernier message: 11/04/2005, 09h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo