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 :

[debutant] Rotation autour d'un cube


Sujet :

OpenGL

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 121
    Points : 127
    Points
    127
    Par défaut [debutant] Rotation autour d'un cube
    Bonjour,

    Je viens de commencer opengl cet aprem et j'en suis au transformations.

    Ds le tuto que je suis ils parlent brievement de gluLookAt sans trop expliquer, donc j'ai essayé de faire un truc tout con : tourner autour du cube. Mais il semble qu'il y ai un soucis, en effet il arrive que je vois trois faces ^^ :



    Je vous met aussi le code (c'est du python mais ça ne change pas grand chose par rapport au c vu la simplicité du code) :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    from OpenGL.GL import *
    from OpenGL.GLU import *
    from OpenGL.GLUT import *
    import sys
    from math import *
     
    global anglex
    anglex=0
    def Paint(*args):
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
     
        p=[
        [-0.5,-0.5, 0.5],
        [-0.5, 0.5, 0.5],
        [ 0.5, 0.5, 0.5],
        [ 0.5,-0.5, 0.5],
        [-0.5,-0.5,-0.5],
        [-0.5, 0.5,-0.5],
        [ 0.5, 0.5,-0.5],
        [ 0.5,-0.5,-0.5]]
        color=[
            [1.0,1.0,1.0],
            [0.5,0.5,0.5],
            [0.0,0.5,1.0],
            [0.0,0.0,1.0],
            [0.5,0.0,1.0],
            [1.0,0.0,1.0]]
        f=(
        (0,1,2,3),
        (3,2,6,7),
        (4,5,6,7),
        (0,1,5,4),
        (1,5,6,2),
        (0,4,7,3));
        for i in range(6):
            glBegin(GL_POLYGON)
            glColor3f(color[i][0], color[i][1], color[i][2])
            for j in range(4):
     
     
                glVertex3f(p[f[i][j]][0], p[f[i][j]][1], p[f[i][j]][2])
            glEnd()
     
        glFlush()
        glutSwapBuffers()
     
    def rotation(*args):
        glLoadIdentity()
        # La rotation se fait ICI
        gluLookAt(cos((globals()['anglex']*3.14)/180),0, sin((globals()['anglex']*3.14)/180), 0,0,0, 0,1,0)
        globals()['anglex']+=0.01
        glFlush()
        glutPostRedisplay()
        glutSwapBuffers()
     
    def reshape(x, y):
        if (x<y):
            glViewport(0,(y-x)/2,x,x);
        else :
            glViewport((x-y)/2,0,y,y)
     
    def main(x, y):
        glutInit(sys.argv)
        glutInitDisplayMode(GLUT_DEPTH | GLUT_RGB | GLUT_DOUBLE)
        glutInitWindowSize(x, y)
        glutCreateWindow('Carre Blanc')
        glEnable(GL_DEPTH_TEST)
        glutReshapeFunc(reshape)
        glutDisplayFunc(Paint)
        glutIdleFunc(rotation)
        glutMainLoop()
     
    main(300, 300)

  2. #2
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 121
    Points : 127
    Points
    127
    Par défaut
    Je pense que c'est parce que la camera est à linterieur du cube, mais comment regler ça ?

    Edit : meme en fesant n cube plus petit ça fait la meme chose :s


  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Et en multipliant ton cos et ton sin par une constante, pour avoir un rayon de rotation autour du cube plus grand que 1 ?

  4. #4
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 121
    Points : 127
    Points
    127
    Par défaut
    Salut,

    J'ai dabord essayé ça avant d'essayer de reduire la taille du cube et ça veut pas :'(. Pire, il n'y a plus rien à l'ecran ^^ (d'ailleur je ne comprend pas pkoi lol)

    Merci quand meme d'avoir repondu

    edit : quand je multiplie par 2 --> rien
    Par 1.5, j'ai un truc tout allongé mais cette fois ça respecte bien la rotation, je nai que deux couleur à la fois. Par contre le carré (qui ressemble plus à un rectangle mtnt ^^) se deplace de gauche à droite avant de revenri d'un coup sec à gauche ^^
    et par qqch inferieur à 1.5 (genre 1.4), le cube a une forme correcte, par contre, bien que ce soit moins franc, il ya kan meme des passages à 3 couleur :s

  5. #5
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 121
    Points : 127
    Points
    127
    Par défaut
    hop c'est reglé

    C'etait une histoire de perspective :p
    voilà ce qu'il faut rajouter à l'initialisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    gluPerspective(45.0,1.0,0.1,10.0)
    glMatrixMode(GL_MODELVIEW)
    Et en multipliant les cos et sin par une constante ou en retrecissant à la construction le cube par une constante je peut gerer l'eloignement
    Nickel

  6. #6
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    hop just un commentaire pour jouer au lourd
    tu fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        for i in range(6): 
            glBegin(GL_POLYGON) 
            glColor3f(color[i][0], color[i][1], color[i][2]) 
            for j in range(4): 
     
     
                glVertex3f(p[f[i][j]][0], p[f[i][j]][1], p[f[i][j]][2]) 
            glEnd()
    alors qu'il est preferable de mettre le glBegin()/glEnd() à l'exterieur de la boucle i...

  7. #7
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 121
    Points : 127
    Points
    127
    Par défaut
    Oui mais ds ce cas là il faut que j'utilise glBegin(GL_QUADS) sinon ça donne pas le bon resultat :p

  8. #8
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    oui, ce qui est d'ailleur nettement mieux... tu peut aussi utiliser des triangle strip ou triangle fan, ce qui est encore mieux...
    par ordre de preference il faut utiliser :
    triangle strip/fan
    quads
    polygones (mais la il faut etre desesperé et ne par reussire à transformer son poly en triangles...)

    [edit] surtout que les polygone posent des problemes lorsqu'ils ne sont pas convex, probleme qui ne se pose pas avec les triangles...

  9. #9
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 121
    Points : 127
    Points
    127
    Par défaut
    Je vais me renseigner au niveau des triangles fan/strip :p

    Merci pour les remarques

Discussions similaires

  1. Rotation successive d'un cube suivant les 3 axes
    Par basic83 dans le forum OpenGL
    Réponses: 8
    Dernier message: 15/01/2008, 08h43
  2. rotation autour d'un objet scene OpenGL
    Par hysah dans le forum OpenGL
    Réponses: 1
    Dernier message: 01/05/2006, 17h31
  3. Rotation autour d'un point
    Par Webhellfire dans le forum OpenGL
    Réponses: 1
    Dernier message: 10/01/2006, 18h21
  4. [Rotation] Faire tourner un cube sur lui-même
    Par cyber_N dans le forum OpenGL
    Réponses: 4
    Dernier message: 14/07/2005, 21h29

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