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 :

dessin de cube et cordonnées


Sujet :

OpenGL

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 5
    Par défaut dessin de cube et cordonnées
    Bonjour, je voudrai savoir que signifie les -1,1 etc..entr les parenthèses ?
    Parce que c'est bien beau de dessiner un cube en copier coller mais ça ne sert à rien car on ne peut pas le refaire plus tard sans modèle.
    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
    glBegin (GL_QUADS); 
    glVertex3i (-1,-1,1); // première face 
    glVertex3i (-1,1,1); 
    glVertex3i (1,1,1); 
    glVertex3i (1,-1,1); 
    glVertex3i (-1,-1,-1); // deuxième face 
    glVertex3i (-1,1,-1); 
    glVertex3i (1,1,-1); 
    glVertex3i (1,-1,-1); 
    glVertex3i (-1,1,-1); // troisième face 
    glVertex3i (1,1,-1); 
    glVertex3i (1,1,1); 
    glVertex3i (-1,1,1); 
    glVertex3i (-1,-1,-1); // quatrième face 
    glVertex3i (1,-1,-1); 
    glVertex3i (1,-1,1); 
    glVertex3i (-1,-1,1); 
    glVertex3i (-1,-1,-1); // cinquième face 
    glVertex3i (-1,-1,1); 
    glVertex3i (-1,1,1); 
    glVertex3i (-1,1,-1); 
    glVertex3i (1,-1,-1); // sixième face 
    glVertex3i (1,-1,1); 
    glVertex3i (1,1,1); 
    glVertex3i (1,1,-1); 
    glEnd();
    Je sais que pour faire un carré il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    glBegin(GL_QUADS);
                glVertex3d(-1-1,0);
                glVertex3d(-1,1,0);
                glVertex3d(1,1,0);
                glVertex3d(1,-1,0);
            glEnd();
    Mais comment peut-on deviner les sommet des autre face du cube ??

    J'éspère que vous avez bien compris ma question ^^


    merci d'avance.

  2. #2
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 371
    Par défaut
    bien le bonjour
    Citation Envoyé par koyateam
    Bonjour, je voudrai savoir que signifie les -1,1 etc..entr les parenthèses ?
    ce sont les coordonnées cartésiennes x,y,z de chacun des vertex.

    un cube comporte 6 faces, chaque face 4 sommets, il faut donc définir 24 vertex.

    Pour mieux visualiser les coordonnées de chacun des vertex, fais un dessin, un repère x,y,z et place les points de ton cube, les coordonnées vont t'apparaître d'elles-mêmes.

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 5
    Par défaut
    Merci beaucoup c'est plus clair comme ça mais lorsque que j'écris
    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
    glBegin(GL_QUADS);
           glColor3d(0,0,1);
             glVertex3d(-1,1,1);
             glVertex3d(1,1,1);
             glVertex3d(-1,-1,1);
             glVertex3d(1,-1,1);
           glColor3d(0,1,0);  
             glVertex3d(1,1,1);
             glVertex3d(1,-1,1);
             glVertex3d(1,1,-1);
             glVertex3d(1,-1,-1);
           glColor3d(1,0,0);  
             glVertex3d(-1,1,1);
             glVertex3d(1,1,1);
             glVertex3d(-1,1,-1);
             glVertex3d(1,1,-1);
           glColor3d(1,1,0);  
             glVertex3d(1,1,-1);
             glVertex3d(1,-1,-1);
             glVertex3d(-1,-1,-1);
             glVertex3d(-1,1,-1);
           glColor3d(1,1,1);
             glVertex3d(-1,1,1);
             glVertex3d(-1,-1,1);
             glVertex3d(-1,1,-1);
             glVertex3d(-1,-1,-1);
     
             glVertex3d(-1,-1,1);
             glVertex3d(1,-1,1);
             glVertex3d(-1,-1,-1);
             glVertex3d(1,-1,-1);
     
        glEnd();
    ça fait ça :

  4. #4
    Membre confirmé

    Inscrit en
    Août 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 43
    Par défaut
    pour la face rouge, blanche et bleu, l'ordre dans lequel tu défini chaque sommet n'est pas bon...
    pour un quadrilatère, il faut parcourir les sommet soit dans le sens horraire soit dans le sens anti-horraire, mais tu ne peux pas "revenir en arrière" à un moment... c'est ce que tu as fait là, et c'est pourquoi ton quadrilatère est troué, c'est en fait deux triangles isocèles qui ont deux sommets en commenu...

    tu dois donc changer l'odre dans lequel tu appel glVertex pour les faces qui rencontrent ce problème...

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 5
    Par défaut
    A d'accord ,donc en fait si j'ai un carré ABCD il faut définir les points a, b ,c et d mais pas a,c,d,b.!

    Est-ce qu'il existe une commande pour charger des volumes fait par blender ? Par exemple un pote a fait un marteau : est-ce que je peux l'afficher comme les sphère d'opengl ? Ou faut-il un moteur de jeu ?

    Merci

  6. #6
    Membre confirmé

    Inscrit en
    Août 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 43
    Par défaut
    je ne connais pas le format de blender, mais en grso pour stocker des objets en 3d, on stocke l'ensemble des vertex de l'objet... si tu connais le format du fichier, tu peux le lire de manière correcte et ainsi récupérer l'ensemble des coordonées en mémoire... une fois que tu les as en mémoire, tu affiches tout avec une boucle de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    glBegin(GL_TRIANGLES);
    for(int i = 0 ; i < num_verts ; i += 3)
    {
    glVertex3fv(&verts[i][0]);
    glVertex3fv(&verts[i+1][0]);
    glVertex3fv(&verts[i+2][0]);
    }
    glEnd();
    et voilà... en gros
    après, si le format stockait plus d'informations (coordonées de normales, de couleur, de textures... tu peux aussi les utiliser de la même manière)

    pour se familiariser avec les format 3D, jette un coup d'oeil à celui du format OBJ, il est facile à comprendre
    il stocke dans un premier temps tout les vertex, puis toute les normales, etc..., puis un liste d'indice qui forme une face : le vertex n, m, et p forment la première face, par exemple, à toi après de reconstituer ta face (glTriangle) avec les bon vertex...

    bon voilà en gros comment c'est fait, pas besoin de "moteur de jeu", si ce n'est le petit moteur que tu vas construire pour afficher ton objet.

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 5
    Par défaut
    Euh c'est quoi le format OBJ. Je suis débutant en opoengl donc je ne connais pas tous les termes. ^^

    Merci quand même

  8. #8
    Membre confirmé

    Inscrit en
    Août 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 43
    Par défaut
    tu débutes en opengl mais ça devrait pas t'empêcher d'utiliser google...

    http://www.csit.fsu.edu/~burkardt/data/obj/obj.html

    OBJ c'est un format de fichier (fichier .obj) comme il en existe tant (3ds, md2, md3...) utilisé pour stocker des "meshs", un petit peu comme le fichier que doit t'exporter blender, non ?
    la différence entre tout ces formats sont : les informations stockées (par exemple, le OBJ ne stocke aucune information d'animation, contrairement au md2, md3, md5, 3ds..), et aussi bien sur la manière de les stocker...

  9. #9
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 5
    Par défaut
    Merci beaucoup finalement j'ai prisle moteur irrlicht pour afficher des meshes.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 39
    Par défaut
    Je me permets de remonter ce sujet car je n'arrive pas à trouver la réponse à ma question, même si au vu des informations précédentes je commence à comprendre un peu le principe.

    Tout d'abord, il faut savoir que je débute en OpenGL depuis deux semaines. Pour apprendre, je me sers de l'excellent tutoriel (c'est pas de la flatterie, mais ce que je pense), de notre ami qui a traduit NeHe (ici pour ceux qui comme moi veulent apprendre sur de bonnes bases).

    J'en suis actuellement au tutoriel sur les textures. Grâce à la qualité des explications, je m'imprègne peu à peu du concept de la programmation graphique (je n'en avais jamais fait, à part avec Visual Basic, si on peut appeler cela de la PG).

    Je suis conscient du fait que je dois continuer ces tutoriels pour assimiler complètement la technique de la programmation 3D, en codant "en dur" pour créer mes objets (je peux dire aussi sprite, dans le cadre d'un jeu, ou élément de décors).

    Maintenant, au vu de ma petite avancée, je me rends compte que lorsque je serais arrivé à un niveau plus "élevé" dans la compréhension d'OpenGL, il sera plus simple pour moi de créer un "objet" via un logiciel 3D comme Blender (que j'ai, cela tombe bien ..) et "récupérer" la ressource ainsi créée pour l'incorporer dans le jeu que je souhaite créer.

    Peut-être vais-je trop vite dans la démarche ou que j'aurais mes réponses par la suite dans mes tutoriels, mais je me pose la question (j'y pense la nuit et n'arrive pas à trouver le sommeil ) de savoir comment on récupère les informations d'un objet créé en 3D via Blender (mon cas de figure) pour un programme réalisé en C++ avec OpenGL comme technologie 3D.

    En raisonnant tout haut (c'est le but d'un forum où on échange des idées), je me dis qu'un objet, c'est une classe. Cette classe a des variables-membres et des fonctions membres. Et donc elle aura un constructeur, permettant d'initialiser tout objet que j'instancierais de ma classe. C'est le but de la manœuvre d'une classe, pouvoir dupliquer à volonté selon les besoins autant d'objets que nécessaire (très pratique quand on veut créer un jeu genre wargame).

    Maintenant, si je raisonne du point de vue de Blender, je n'aurais pas d'informations concernant les fonctions-membres de ma classe, ce n'est pas la finalité d'un logiciel de dessin 3D. Par contre, comme je l'ai lu ici dans ce sujet, nous avons dans le format obj (nous pouvons sauver sous Blender les objets que nous créons sous ce format, comme aussi sous format x si nous réalisions un jeu avec DirectX9) les caractéristiques de notre objet, à savoir les positionnements des vertex, couleurs associés, etc.. bref, ce qui permet de créer visuellement l'objet.

    Et là j'aimerais avoir de quoi un lire quelque chose là-dessus, me permettant de comprendre comme on le fait.

    Les variables-membres de mon objet (donc d'abord dans l'objet 3D sauvé sous format obj) doivent être intégrés dans ma classe (dans mon programme) pour que celle-ci a les variables-membres qui me seront nécessaires lorsque je voudrais instancier un objet de cette classe et le dessiner via DrawGLScene ?

    Bref, vous le comprendrez, j'essaye d'avoir une réponse à cela. Déjà, je pourrais mieux dormir ( ) et cela me motivera encore plus dans ma progression avec OpenGL.

    J'espère que j'ai pas été trop brouillon dans mes explications ..

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

Discussions similaires

  1. Dessiner un cube
    Par jobard344 dans le forum C
    Réponses: 5
    Dernier message: 01/02/2013, 17h49
  2. Peut-t-on dessiner un cube à partir de plusieurs tables de faits ?
    Par zerocoolyoussef dans le forum Mondrian
    Réponses: 7
    Dernier message: 04/12/2009, 10h55
  3. Comment dessiner un cube autour d'un objet sélectionné
    Par Hoodyny dans le forum XNA/Monogame
    Réponses: 6
    Dernier message: 08/10/2009, 15h30
  4. Dessiner une ligne dans un cube transparent ?
    Par Muetdhiver dans le forum OpenGL
    Réponses: 4
    Dernier message: 04/05/2004, 11h06
  5. [debutant] Probleme pour dessiner un simple cube
    Par scorpiwolf dans le forum DirectX
    Réponses: 6
    Dernier message: 02/07/2003, 20h29

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