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 :

Problème d'affichage


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 54
    Par défaut Problème d'affichage
    Bonjour,
    J'ai un problème avec l'affichage et la gestion.

    Avec Glut j'ai la position du curseur de la souris , puis j'envoi cette position dans une fonction afin qu'elle m'affiche un cadre autour.

    Par contre le curseur n'est pas au centre du cadre alors que mes calculs ont l'air d'être juste..
    ca doit encore provenir de glOrtho ???

    Voici un bout de 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
    void afficherRectangle(float posCentraleX, float posCentraleY, float tailleX, float tailleY)
    {
    	float x1 = posCentraleX;
    	float y1 = posCentraleY;
    	float x2 = posCentraleX + tailleX;
    	float y2 = posCentraleY + tailleY;
     
    	glLineWidth (10);
    	glBegin(GL_LINE_LOOP);		
    		glVertex2f(x1, y1);
    		glVertex2f(x2, y1);
    		glVertex2f(x2, y2);
    		glVertex2f(x1, y2);			
    	glEnd();
    }
     
    void Affichage(void)  
    {
      glViewport (0, 0, 1024, 768);
      glMatrixMode (GL_PROJECTION);
      glLoadIdentity ();
      glOrtho(0, 1024, 768, 0, -1, 1);
      glMatrixMode (GL_TEXTURE);
      glLoadIdentity ();
      glOrtho(0, 2.0f, 2.0f, 0, 0, 1);
     
      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     
    	afficherRectangle(0.f, 0.f, 100.f, 100.f);  // ca marche pas
     
    	glutSwapBuffers();
     
    	glutPostRedisplay();
     
    }
     
    void Init()
    {
        glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    	glEnable(GL_DEPTH_TEST | GL_TEXTURE_2D);
     
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity(); 
    	gluPerspective(45.0,1.0,0.1,20.0);
    	glMatrixMode(GL_MODELVIEW);
    }
    Je vois pas ce qu'il faut changer pour que ca marche correctement

  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 bonsoir,

    Citation Envoyé par franco01
    Avec Glut j'ai la position du curseur de la souris , puis j'envoi cette position dans une fonction afin qu'elle m'affiche un cadre autour.
    dans ton code, je ne vois pas où il est fait mention d'un curseur ou de la récupération de ses coordonnées. comment les passes-tu à ta fonction qui affiche un rectangle, puisque celle ci prend 4 flottants en argument ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 54
    Par défaut
    En gros pour faire simple, je voulais passer en mode 2d, j'ai essayé d'inclure glOrtho2D(0, 100, 100, 0, -1, 1); mais lors de la compil il me dit undeclared identifier (comment ca se fait qu'il ne connait pas cette fonction, faut lui inclure un header spécial?).

    Par exemple si je veux dessiner un carré en haut à gauche de l'écran de 100 pixels de large, j'appel ma fonction afficherRectangle(0, 0, 100, 100), mais le carré s'affiche un peu au dessus de ma bande bleue du haut de l'écran, donc je ne vois que la moitié du rectangle.

    Pour résoudre le problème il faudrait peut-être se placer en mode 2D (puisque je ne veux dessiner que des objets en 2d) mais je n'y arrive pas.

    Que me proposez-vous?


  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 54
    Par défaut
    Voila ce que je voudrais faire :
    Je voudrais rendre ce repère à mon écran (avec seulement X et Y)

    (0,0)---------------------(1024,0)
    | |
    | |
    | |
    | |
    (0,768)------------------(1024,768)

    dans la fonction Affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      glViewport (0, 0, 1024, 768);
      glMatrixMode (GL_PROJECTION);
      glLoadIdentity ();
      glOrtho(0, 1024, 768, 0, -1, 1);
      glMatrixMode (GL_TEXTURE);
      glLoadIdentity ();
      glOrtho(0, 2, 2, 0, 0, 1); // je comprend pas bien pourquoi???
    dans la foncction Initialisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    glEnable(GL_DEPTH_TEST | GL_TEXTURE_2D);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();  
    gluPerspective(45.0,1.0,0.1,20.0); // je comprend pas bien non plus???
    glMatrixMode(GL_MODELVIEW);
    Remarque : Je dois également utiliser des textures que je dois plaquer sur mes rectangles, tout ce qui est textures ca affiche bien sauf que mon rectangle est décalé donc je comprend pas bien. Si je lui dit de m'afficher un rectangle texturé ou non, à la position (0,0) et de taille (100,100) le rectangle et la texture morde sur la barre bleur en haut de l'écran.

    Si quelqu'un sait d'où ca peut venir je suis preneur.

    J'espère que vous n'êtes pas tous en vacances

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 54
    Par défaut
    Si une personne es bien aimable de m'aider à initialiser ma fenêtre glut pour que je puisse gérer mon affichage au mieux. J'aimerais faire correspondre le repère de glut (le point origine en haut à gauche de l'écran) avec celui de l'affichage. Car sinon ce serait impossible à faire mes calculs. Car si je clique sur l'écran, j'ai besoin que les coordonnées que me renvoi glut soit la même de celle où l'on peut aficher des choses dans la scène

    Donc il me faut juste l'initialisation de glut avec une bonne perspective et placer la caméra de la bonne facon (sa position, où elle regarde etc...)

    Car j'ai bien dû mal à me débrouiller seul au niveau de l'affichage.

    Merci pour ceux qui tenteront de m'expliquer au moins la démarche car le plus important est de comprendre

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Juin 2009
    Messages : 33
    Par défaut
    Puisque tu souhaites dessiner uniquement des objets 2D, je te montre la procédure d'initialisation (tu penseras à inclure glu.h en plus) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glViewport(0,0,1024,768);
    gluOrtho2D(0,1024,768,0);
     
    glClear(...);
     
    ....
    Pour que ton cadre soit autour du curseur, il faudrait écrire dans ta fonction afficherRectangle(...) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int x1 = posCentraleX + tailleX, y1 = posCentraleY + tailleY;
    int x2 = posCentraleX + tailleX, y2 = posCentraleY - tailleY;
    int x3 = posCentraleX - tailleX, y3 = posCentraleY - tailleY;
    int x4 = posCentraleX - tailleX, y4 = posCentraleY + tailleY;   // Les 4 coins du cadre
     
    glBegin(GL_LINE_LOOP);
    glColor3f(1,1,1); // Pour que ton cadre soit visible
    glVertex2i(x1,y1);
    glVertex2i(x2,y2);
    glVertex2i(x3,y3);
    glVertex2i(x4,y4);
    glEnd();
    Voilà voilà.

Discussions similaires

  1. Problème d'affichage
    Par mustang-gx dans le forum Bases de données
    Réponses: 8
    Dernier message: 26/01/2005, 22h54
  2. Problème d'affichage avec trace
    Par WriteLN dans le forum Flash
    Réponses: 10
    Dernier message: 22/10/2003, 16h59
  3. [Kylix] problème d'affichage
    Par scalvi dans le forum EDI
    Réponses: 1
    Dernier message: 18/06/2003, 10h07
  4. Réponses: 1
    Dernier message: 06/03/2003, 11h57
  5. probléme d'affichage d'une fiche
    Par sb dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 09h43

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