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 :

Dessiner un point sur l'écran


Sujet :

OpenGL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Points : 8
    Points
    8
    Par défaut Dessiner un point sur l'écran
    Bonsoir

    J'ai pour projet de dessiner des segments a l'aide de l'algorithme de bresenham,si je vois à peu près commennt procéder pour dessiner la droite, je rencontre un problème pour le moins embetant

    Je n'arrive pas à afficher un point lorsque je clique sur une partie de l'écran OpenGL ! En effet l'utilisateur doit cliquer deux points sur l'écran qui seront relié via l'algo de Bresenham,or je n'arrive même pas à faire apparaitre un point. Voici mon programme

    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
    #include <gl/glut.h>
    #include <iostream>
    #include <fstream>
     
    using namespace std;
     
    void affichage();
    void clavier(unsigned char touche,int x,int y);
    void reshape(int x,int y);
    void idle();
    void mouse(int bouton,int etat,int x,int y);
    void Bresenham(int,int,int,int );
     
    char presse;
    int x,y,xold,yold;
    int nbclik=0;
    int tab[2][2];
    int dx,dy,incX,incY,dp,xa,ya,xb,yb;
     
    int main(int argc,char** argv){
     
            glutInit(&argc,argv);
            glutInitDisplayMode(GLUT_RGB);
            glutInitWindowSize(500,500);
            glutInitWindowPosition(100,100);
            glutCreateWindow("un carré");
     
            glClearColor(0.0,0.0,0.0,0.0);
            glColor3f(1.0,1.0,1.0);
            glPointSize(2.0);
     
            glutDisplayFunc(affichage);
            glutKeyboardFunc(clavier);
            glutMouseFunc(mouse);
     
            glutMainLoop();
            return 0;
    }
     
    void affichage(){
     
        glClear(GL_COLOR_BUFFER_BIT);
     
        glBegin(GL_POLYGON);
        glColor3f(1.0,0.0,0.0);
        glVertex2f(-0.5,-0.5);
     
        glColor3f(0.0,1.0,0.0);
        glVertex2f(0.5,-0.5);
     
        glColor3f(0.0,0.0,1.0);
        glVertex2f(0.5,0.5);
     
        glColor3f(1.0,1.0,1.0);
        glVertex2f(-0.5,0.5);
     
        glEnd();
     
        glFlush();
     
    }
     
    void clavier(unsigned char touche,int x,int y){
     
            switch(touche){
     
                case 'p':
     
                    glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
                    glutPostRedisplay();
                    break;
     
                case 'f' :
                    glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
                    glutPostRedisplay();
                    break;
     
                case 's':
                    glPolygonMode(GL_FRONT_AND_BACK,GL_POINT);
                    glutPostRedisplay();
                    break;
     
                case 'd':
                    glEnable(GL_DEPTH_TEST);
                    glutPostRedisplay();
                    break;
     
                case 'a' :
                     glBegin(GL_POINT);
                     glVertex2d(1,1);
                    glEnd();
                    glutPostRedisplay();
                    break;
     
     
                case 'q':
                    exit(0);
            }
    }
     
     
     
    void mouse(int bouton,int state,int x,int y){
     
     
       if (bouton==GLUT_LEFT_BUTTON && state==GLUT_UP)
        {
                cout << "clik" << endl;
                glBegin(GL_POINT);
                glVertex2d(1,1);
                glEnd();
                glutPostRedisplay();
                glFlush();
        }
    }
    Je pense que dessiner le point dans la fonction "mouse" n'est pas une bonne idée, mais je ne vois pas où et comment placer les nouvelles coordonnés que l'utilisateur aura ajouté..

    Merci à tous de votre aide

  2. #2
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 21
    Points : 19
    Points
    19
    Par défaut
    En effet, il ne faut pas dessiner avec la souris comme cela.
    Tu fais un sommet et dessuite après tu demande un redisplay, soit la fonction affichage dont l'appelle à glclear efface ce que tu as fait.

    Perso je ferai comme ça :
    Utilisation de la fonction mouse pour allouer un espace avec les nouveau sommet et la fonction affichage consulte cette espace mémoire pour voir les points à afficher.

  3. #3
    Expert éminent
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Points : 6 812
    Points
    6 812
    Par défaut
    Je ne vois pas ta configuration de perspective, serait un oubli ? Par défaut, je ne sais plus si la perspective est orthogonal ou pas.

    Je te conseille de lire ceci : http://jeux.developpez.com/faq/openg...#TECHNIQUES_2d

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Désolé pour la réponse,vu que e suis en partiel pas facile de venir souvent jeter un coup d'oeil

    En tout cas merci pour vos réponse en esperant que cela m'aidera a avancer

    Perso je ferai comme ça :
    Utilisation de la fonction mouse pour allouer un espace avec les nouveau sommet et la fonction affichage consulte cette espace mémoire pour voir les points à afficher.
    C'est exactement ce que je pensais faire ,en fait je l'ai fais..mais cela ne marche pas également

    mon idée de venir à un truc tout con, un clik = un point..histoire de partir sur des bonnes bases

    mais il semble que j'ai oublié les glloadidentity ou glmatrixmode..hum cela me semble pour l'instant rop abstrait surtout que je n'arrive pas à bien fixe les glortho et autre glmatrix mode

  5. #5
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 21
    Points : 19
    Points
    19
    Par défaut
    En plus il me semble quand rien n'est initialisé niveau matrice de projection, le point 1 1 est totalement dans l'angle de l'écran.

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 33
    Points : 43
    Points
    43
    Par défaut
    Je propose :
    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
    void affichage()
    {
    glClear(GL_COLOR_BUFFER_BIT);
     
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glViewport(0,0,largeurFenetre,hauteurFenetre); // Peut-être inutile ?
    gluOrtho2D(0,largeurFenetre,0,hauteurFenetre);
     
    glBegin(GL_POINTS);
    glColor3f(1,1,1);
    glVertex2i(xClick,yClick);  // xClick et yClick sont des int
    glEnd();
     
    glFlush();
    }
     
    void mouse(int bouton, int state, int x, int y)
    {
    if(bouton == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
    {
    xClick = x;
    yClick = hauteurFenetre - y; // Car y est défini par rapport au HAUT de la fenêtre
    }
    }
    Voici le code pour un point.

Discussions similaires

  1. Dessiner un Point sur une image
    Par Thebaloo dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 06/04/2010, 15h35
  2. Réponses: 10
    Dernier message: 15/04/2008, 15h26
  3. Dessiner un point sur un pixmap avec GTK2
    Par jijiz dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 14/04/2008, 17h52
  4. Dessiner et effacer sur l'écran
    Par nick974 dans le forum Débuter
    Réponses: 4
    Dernier message: 31/03/2008, 11h12
  5. dessiner un point sur un label
    Par gillesrun dans le forum Windows Forms
    Réponses: 46
    Dernier message: 03/07/2007, 08h04

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