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] Probleme avec glortho


Sujet :

OpenGL

  1. #1
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut [DEBUTANT] Probleme avec glortho
    Bonjour,

    J'utilise glortho pour projeter ma vue 3d en 2d. J'ai pres de moi une ligne et loin de moi un plan. Or quand je fais la projection, je vois le plan et plus la ligne. N'y a t'il pas une option a definir quelque part, sachant que j'ai bien fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      glutInit(&argc, &argv);
      glutInitWindowSize(800,400);
      glutInitWindowPosition(100,100);
      glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH| GLUT_RGB);
      glEnable(GL_DEPTH_TEST);
      glutCreateWindow("Test");
    Et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);	// Clear The Screen And The Depth Buffer
      glMatrixMode(GL_MODELVIEW);
    	glLoadIdentity();									                  // Reset The View
     
      gluPerspective(170,2,0,1000.0);
      gluLookAt( ... );
      glOrtho(-1,1,-1,1,0,1000.0);

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 108
    Points : 128
    Points
    128
    Par défaut
    Il faut utiliser gluPerspective ou glOrtho (et pas les deux) avec glMatrixMode(GL_PROJECTION) dans le resize.

  3. #3
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut
    Ok merci je vais essayer cela !

    Je fais cela maintenant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //  glMatrixMode(GL_MODELVIEW);
      glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();									                  // Reset The View
     
    //  gluPerspective(170,2,1,1000.0);
      glOrtho(-1,1,-1,1,0,1000.0);
    Le probleme c'est que mon plan est bien projete mais je ne vois toujours pas mes axes.... Je cherche

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 108
    Points : 128
    Points
    128
    Par défaut
    Peux-tu nous montrer le code du dessin ?

  5. #5
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut
    En gros, je remplis des structures qui definissent les differents objets. Ensuite, je dessine ces objets avec draw qui est une methode generique qui sait dessinier des points, lignes, triangles, rectangles et polygones :

    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
     
    #define DEFAULT_WIDTH   600
    #define DEFAULT_LENGTH  200
    #define DEFAULT_BORDER  50
     
    void draw(GLObj * Obj)
    {
      int i;
     
      if(Obj->Mode & GLMODE_POINTS)
      {
        for(i=0; i<Obj->GLPointsPointListSize; i++)
        {
    		  glBegin(GL_POINTS);
            glColor3f(((Obj->GLPointsPointList[i].xColor & 0x00FF0000) >> 16) / 255.0,
                      ((Obj->GLPointsPointList[i].yColor & 0x0000FF00) >> 8) / 255.0,
                      ((Obj->GLPointsPointList[i].zColor & 0x000000FF)) / 255.0);
    		    glVertex3f(Obj->GLPointsPointList[i].x,
                       Obj->GLPointsPointList[i].y,
                       Obj->GLPointsPointList[i].z);
          glEnd();
        }
      }
      if(Obj->Mode & GLMODE_LINES)
      {
        for(i=0; i<Obj->GLLinesPointListSize; i+=2)
        {
    		  glBegin(GL_LINES);
            glColor3f(((Obj->GLLinesPointList[i].xColor & 0x00FF0000) >> 16) / 255.0,
                      ((Obj->GLLinesPointList[i].yColor & 0x0000FF00) >> 8) / 255.0,
                      ((Obj->GLLinesPointList[i].zColor & 0x000000FF)) / 255.0);
    		    glVertex3f(Obj->GLLinesPointList[i].x,
                       Obj->GLLinesPointList[i].y,
                       Obj->GLLinesPointList[i].z);
            glColor3f(((Obj->GLLinesPointList[i+1].xColor & 0x00FF0000) >> 16) / 255.0,
                      ((Obj->GLLinesPointList[i+1].yColor & 0x0000FF00) >> 8) / 255.0,
                      ((Obj->GLLinesPointList[i+1].zColor & 0x000000FF)) / 255.0);
    		    glVertex3f(Obj->GLLinesPointList[i+1].x,
                       Obj->GLLinesPointList[i+1].y,
                       Obj->GLLinesPointList[i+1].z);
          glEnd();
        }
      }
      if(Obj->Mode & GLMODE_TRIANGLES)
      {
        for(i=0; i<Obj->GLTrianglesPointListSize; i+=3)
        {
    		  glBegin(GL_TRIANGLES);
            glColor3f(((Obj->GLTrianglesPointList[i].xColor & 0x00FF0000) >> 16) / 255.0,
                      ((Obj->GLTrianglesPointList[i].yColor & 0x0000FF00) >> 8) / 255.0,
                      ((Obj->GLTrianglesPointList[i].zColor & 0x000000FF)) / 255.0);
    		    glVertex3f(Obj->GLTrianglesPointList[i].x,
                       Obj->GLTrianglesPointList[i].y,
                       Obj->GLTrianglesPointList[i].z);
            glColor3f(((Obj->GLTrianglesPointList[i+1].xColor & 0x00FF0000) >> 16) / 255.0,
                      ((Obj->GLTrianglesPointList[i+1].yColor & 0x0000FF00) >> 8) / 255.0,
                      ((Obj->GLTrianglesPointList[i+1].zColor & 0x000000FF)) / 255.0);
    		    glVertex3f(Obj->GLTrianglesPointList[i+1].x,
                       Obj->GLTrianglesPointList[i+1].y,
                       Obj->GLTrianglesPointList[i+1].z);
            glColor3f(((Obj->GLTrianglesPointList[i+2].xColor & 0x00FF0000) >> 16) / 255.0,
                      ((Obj->GLTrianglesPointList[i+2].yColor & 0x0000FF00) >> 8) / 255.0,
                      ((Obj->GLTrianglesPointList[i+2].zColor & 0x000000FF)) / 255.0);
    		    glVertex3f(Obj->GLTrianglesPointList[i+2].x,
                       Obj->GLTrianglesPointList[i+2].y,
                       Obj->GLTrianglesPointList[i+2].z);
          glEnd();
        }
      }
      if(Obj->Mode & GLMODE_QUADS)
      {
        for(i=0; i<Obj->GLQuadsPointListSize; i+=4)
        {
    		  glBegin(GL_QUADS);
            glColor3f(((Obj->GLQuadsPointList[i].xColor & 0x00FF0000) >> 16) / 255.0,
                      ((Obj->GLQuadsPointList[i].yColor & 0x0000FF00) >> 8) / 255.0,
                      ((Obj->GLQuadsPointList[i].zColor & 0x000000FF)) / 255.0);
    		    glVertex3f(Obj->GLQuadsPointList[i].x,
                       Obj->GLQuadsPointList[i].y,
                       Obj->GLQuadsPointList[i].z);
            glColor3f(((Obj->GLQuadsPointList[i+1].xColor & 0x00FF0000) >> 16) / 255.0,
                      ((Obj->GLQuadsPointList[i+1].yColor & 0x0000FF00) >> 8) / 255.0,
                      ((Obj->GLQuadsPointList[i+1].zColor & 0x000000FF)) / 255.0);
    		    glVertex3f(Obj->GLQuadsPointList[i+1].x,
                       Obj->GLQuadsPointList[i+1].y,
                       Obj->GLQuadsPointList[i+1].z);
            glColor3f(((Obj->GLQuadsPointList[i+2].xColor & 0x00FF0000) >> 16) / 255.0,
                      ((Obj->GLQuadsPointList[i+2].yColor & 0x0000FF00) >> 8) / 255.0,
                      ((Obj->GLQuadsPointList[i+2].zColor & 0x000000FF)) / 255.0);
    		    glVertex3f(Obj->GLQuadsPointList[i+2].x,
                       Obj->GLQuadsPointList[i+2].y,
                       Obj->GLQuadsPointList[i+2].z);
            glColor3f(((Obj->GLQuadsPointList[i+3].xColor & 0x00FF0000) >> 16) / 255.0,
                      ((Obj->GLQuadsPointList[i+3].yColor & 0x0000FF00) >> 8) / 255.0,
                      ((Obj->GLQuadsPointList[i+3].zColor & 0x000000FF)) / 255.0);
    		    glVertex3f(Obj->GLQuadsPointList[i+3].x,
                       Obj->GLQuadsPointList[i+3].y,
                       Obj->GLQuadsPointList[i+3].z);
          glEnd();
        }
      }
      if(Obj->Mode & GLMODE_POLYGON)
      {
        for(i=0; i<Obj->GLLinesPointListSize; i++)
        {
    		  glBegin(GL_POLYGON);
          glEnd();
        }
      }
    }
     
    void reshape(int width, int height)
    {
    	if (height==0)										                  // Prevent A Divide By Zero By
    		height=1;										                      // Making Height Equal One
     
    	glViewport(0,0,width,height);						            // Reset The Current Viewport
     
    	glMatrixMode(GL_PROJECTION);						            // Select The Projection Matrix
    	glLoadIdentity();									                  // Reset The Projection Matrix
     
      glOrtho(-DEFAULT_BORDER,DEFAULT_WIDTH+DEFAULT_BORDER,-DEFAULT_BORDER,DEFAULT_LENGTH+DEFAULT_BORDER,0.1f,1000.0f);
     
    	glMatrixMode(GL_MODELVIEW);							            // Select The Modelview Matrix
    	glLoadIdentity();									                  // Reset The Modelview Matrix
    }
     
    void display(void)
    {
    	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);	// Clear The Screen And The Depth Buffer
    	glLoadIdentity();									                  // Reset The View
     
       draw(&Obj3d);
     
      glFlush() ;
      glutSwapBuffers();
    }
    Et dans le main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      glutInit(&argc, &argv);
      glutInitWindowSize(800,400);
      glutInitWindowPosition(100,100);
      glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH| GLUT_RGB);
      glEnable(GL_DEPTH_TEST);
      glutCreateWindow("Test");
      glutDisplayFunc(display);
      glutMouseFunc(mouse);
      glutReshapeFunc(reshape);
     
      ...
     
      glutMainLoop();
    Pour info ma ligne est en -10 suivant z et le plan en -50 suivant z. Si je ne dessine pas ce dernier, la ligne est visible, sinon non.

  6. #6
    Membre averti Avatar de venomelektro
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2004
    Messages : 521
    Points : 316
    Points
    316
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    glColor3f(((Obj->GLPointsPointList[i].xColor & 0x00FF0000) >> 16) / 255.0, 
                      ((Obj->GLPointsPointList[i].yColor & 0x0000FF00) >> 8) / 255.0, 
                      ((Obj->GLPointsPointList[i].zColor & 0x000000FF)) / 255.0);
    juste par curiosité pour ce bout de code :

    pourquoi tu fais Obj->GLPointsPointList[i].xColor & 0x00FF0000) >> 16) / 255.0 ? plutot que de stocker directement trois float ?

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 108
    Points : 128
    Points
    128
    Par défaut
    Tu actives le test de profondeur sasn préciser la fonction à utiliser pour réaliser le test. Désactive le test et regarde ce que cela donne.

  8. #8
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut
    Citation Envoyé par venomelektro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    glColor3f(((Obj->GLPointsPointList[i].xColor & 0x00FF0000) >> 16) / 255.0, 
                      ((Obj->GLPointsPointList[i].yColor & 0x0000FF00) >> 8) / 255.0, 
                      ((Obj->GLPointsPointList[i].zColor & 0x000000FF)) / 255.0);
    juste par curiosité pour ce bout de code :

    pourquoi tu fais Obj->GLPointsPointList[i].xColor & 0x00FF0000) >> 16) / 255.0 ? plutot que de stocker directement trois float ?
    Ma couleur est stockee sur un int c'est plus simple a coder (gout personnel):

    couleur = 0xFF0000 pour rouge
    couleur = 0x00FF00 pour vert
    couleur = 0x0000FF pour bleu.
    couleur = 0x7F7F7F pour gris....

    EDIT : Euh a propos, merci a toi, tu m'as permis de trouver un BUG : un point a forcement une seule couleur et non pas une couleur suivant x, une autre suivant y et une derniere suivant z. Du coup, c'est partout Obj->GLPointsPointList[i].color

  9. #9
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut
    Citation Envoyé par olivic
    Tu actives le test de profondeur sasn préciser la fonction à utiliser pour réaliser le test. Désactive le test et regarde ce que cela donne.
    Desactiver le test ne fonctionne pas. Comment je fais pour preciser le test a faire ?

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 108
    Points : 128
    Points
    128
    Par défaut
    T'as utiliser glDisable pour désactiver le test de profondeur ?

    Sinon, de mémoire c'est glDephFunc qui permet de sélectionner le type de test à appliquer au test de profondeur.

  11. #11
    Membre averti Avatar de venomelektro
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2004
    Messages : 521
    Points : 316
    Points
    316
    Par défaut
    Citation Envoyé par barthelv

    Ma couleur est stockee sur un int c'est plus simple a coder (gout personnel):

    couleur = 0xFF0000 pour rouge
    couleur = 0x00FF00 pour vert
    couleur = 0x0000FF pour bleu.
    couleur = 0x7F7F7F pour gris....

    EDIT : Euh a propos, merci a toi, tu m'as permis de trouver un BUG : un point a forcement une seule couleur et non pas une couleur suivant x, une autre suivant y et une derniere suivant z. Du coup, c'est partout Obj->GLPointsPointList[i].color
    ok , peut etre que tu devrait regarder du coté du coté de glColor3ub qui te permet de passer des unsigned char en param , ce qui t eviterait d avoir a faire une division par 255 a chaque composante RV ou B.

  12. #12
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut
    Merci a tous pour votre aide. En fait je ne faisais le glEnable(GL_DEPTH_TEST); que dans la fonction d'initialisation, alors qu'il faut le faire dans la fonction de resize.


  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 108
    Points : 128
    Points
    128
    Par défaut
    Normalement, cette fonction ne devrait pas être dans la fonction resize mais bien dans l'initialisation. Par contre, il faut faire l'initialisation après la création de la fenêtre et avant de démarrer la boucle d'évènement.

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

Discussions similaires

  1. [debutant]probleme avec le copy constructor
    Par Battosaiii dans le forum Débuter
    Réponses: 10
    Dernier message: 09/11/2005, 11h33
  2. [Debutant] Probleme avec BevelBorder
    Par devil26 dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 09/05/2005, 10h41
  3. [debutant]probleme avec wxwidgets
    Par iwky dans le forum wxWidgets
    Réponses: 11
    Dernier message: 23/01/2005, 21h23
  4. [DEBUTANT] probleme avec split ?
    Par matN59 dans le forum ASP
    Réponses: 6
    Dernier message: 23/10/2004, 16h47
  5. Réponses: 2
    Dernier message: 31/08/2004, 12h45

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