Prog en opengl

wildTiger Messages postés 6 Date d'inscription dimanche 8 juin 2008 Statut Membre Dernière intervention 20 juin 2008 - 19 juin 2008 à 22:33
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 - 20 juin 2008 à 18:10
salut tt le monde
je veux dessiner des points en cliquant par la souris sur ma fenêtre. mais mon prog ne marche pas. est ce que qlq'1 peut m'aider?
voici mon prog:
#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
using namespace std;


static int c = 0 ;
void mouse(int bouton,int etat,int x,int y) {
FILE *stream;
 stream = fopen("point.txt", "w");
 stream = fopen("point.txt", "a");


  if ( etat == GLUT_DOWN )


    switch ( bouton ) {
      case GLUT_LEFT_BUTTON  : 
                               printf("%4d %4d\n",x,y);
                               fprintf(stream,"%4d %4d\n",x,y);
                              glBegin (GL_POINTS);
                             glColor3f(0, 0, 0);
                            glPointSize (32.0); 
                            glVertex2i(x,y);
                           glEnd();
                          glFlush(); 
                          glutSwapBuffers();
                            break ;
        fclose(stream);
        glutPostRedisplay();
    
      case GLUT_RIGHT_BUTTON : exit(0);
                               break; }
}
 
void display(void) {
  glClearColor(1, 1, 0, 0) ;
  glClear(GL_COLOR_BUFFER_BIT) ;
  glOrtho(-1.0,1.0,-1.0,1.0,
          -1.0,1.0);  
    glPushMatrix();
    glFlush();
}


int main(int argc,char **argv) {
 
  glutInit(&argc,argv);
  glutInitWindowSize(400,400);
  glutInitWindowPosition(100,100);
  glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
  glutCreateWindow("Clics de souris") ;      
  glutDisplayFunc(display) ;
  glutMouseFunc(mouse) ; glutMainLoop() ;
  return(0);
}

4 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
20 juin 2008 à 00:06
Ca marche pas comme ca openGL, glut non plus. Tu n'as pas le droit de dessiner en dehors de la fonction "display". Faut stocker les points à afficher dans des tableaux puis les tracer à chaque frame.
0
cs_faucheuse Messages postés 308 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 27 octobre 2011
20 juin 2008 à 10:12
Mdr, ya a peine une heure je me suis dit "tiens se serais marrant de faire un programme Opengl qui desisne des formes selon l'emplacement de la souris"
Et la je trouve se post XD
0
wildTiger Messages postés 6 Date d'inscription dimanche 8 juin 2008 Statut Membre Dernière intervention 20 juin 2008
20 juin 2008 à 13:42
wé luthor j'ai lu un tutoriel sur opengl ce matin et je me suis rendu compte que le code du dessin des points doit être ds la fonction d'affichage.


mais pourriez vs m'expliquer un peu plus comment récupérer mes points dans un tableau?
merci d'avance
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
20 juin 2008 à 18:10
Tu créés une liste en variable globale.

void mouse(int bouton,int etat,int x,int y)
{
if ( etat == GLUT_DOWN )
{
switch ( bouton )
{
        case GLUT_LEFT_BUTTON  :
        Ajouter point (x,y) à la fin de la liste de points.
        glutPostRedisplay();
       break;  

      case GLUT_RIGHT_BUTTON : exit(0);
      break;
}
}
}
void display(void) {
  glClearColor(1, 1, 0, 0) ;
  glClear(GL_COLOR_BUFFER_BIT) ;
  glOrtho(-1.0,1.0,-1.0,1.0,
          -1.0,1.0); 

   glBegin(GL_POINTS);

    pour chaque point de la liste:
    glVertex(element[i].x, element[i].y);
    glEnd();

    glFlush();
}

Sinon, il y a d'autres erreurs dans ton programme:

Ici:
stream = fopen("point.txt", "w");
stream = fopen("point.txt", "a");

Et le "PushMatrix()" qui n'a aucun sens et qui génère des erreurs opengl.
0
Rejoignez-nous