FORUM Tom's Hardware » Programmation » C / C++ / Java » Visual C++ et GLUT : système de coodonnées
 

Visual C++ et GLUT : système de coodonnées

Il y a 208 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : Visual C++ et GLUT : système de coodonnées
 
Plus d'informations

Bonjour, j'ai un petit souci : je travaille avec Microsoft Visual C++ et utilise la librairie GLUT d'OpenGl. Je veux créer une fenêtre qui me permette de dessiner un polygone. Pour celà, à chaque fois que l'on clique sur le bouton gauche de la souris, un point apparaît, et ainsi de suite... Ensuite, je veux créer un bouton OK, qui permette de relier les points et tracer ainsi le polygone. Mon problème, c'est que je n'arrive pas à faire correspondre les systèmes de coordonnées de la fenêtre et de void processMouse(int button, int state, int x, int y) lorsque l'on clique dans la fenêtre. Ce qui fait que le point n'apparaît pas au bon endroit... J'ai essayé d'utiliser gluOrtho2D() pour les faire coincider, mais ça ne marche pas. Je n'y comprends rien!
Je vous envoie mon code (désolée, il n'est pas très propre, mais c'est la première fois que je programme en C++...) qui fait apparaître un triagle quand on a cliqué dans la fenêtre.
 
 
#include <iostream.h>
#include <gl/glut.h>
#include<gl/gl.h>
 
unsigned int n=0;
int vertices[100];
int screenWidth=600, screenHeight=400;
int a=screenWidth/2,b=screenHeight/2;
 
 
void changeSize(int w, int h) {
 
 // Prevent a divide by zero, when window is too short
 // (you cant make a window of zero width).
 if(h == 0)
  h = 1;
 
 float ratio = 1.0* w / h;
 
 // Reset the coordinate system before modifying
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
screenWidth=w;
screenHeight=h;
 
 gluOrtho2D(0,screenWidth,screenHeight,0);
 
 // Set the viewport to be the entire window
 glViewport(0, 0, w, h);
 
/* // Set the correct perspective.
 gluPerspective(45,ratio,1,1000);
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();
 gluLookAt(w/2,h/2,-2,  
        w/2,h/2,0.0,
     0.0,-1.0,0.0);
*/
 
}
 
 
 
void renderScene(void) {
 glClearColor(1.0,1.0,1.0,1.0);
 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
 
 glPushMatrix();
 
 glColor3f(0,0,0);
/*if (n>4)
{
 glVertexPointer(2,GL_INT,0,vertices);
 glDrawArrays(GL_POLYGON,0,n);
}*/
 glBegin(GL_POLYGON);
  glVertex3f(600,100,0.0);
  glVertex3f(610,100,0.0);
  glVertex3f(600,110,0.0);
 
/*  glVertex3f(-10+a,-10+b,0.0);
  glVertex3f(10+a,-10+b,0.0);
  glVertex3f(10+a,10+b,0.0);
  glVertex3f(-10+a,10+b,0.0);*/
 glEnd();
 glPopMatrix();
 
 glutSwapBuffers();
 
}
 
void processMouse(int button, int state, int x, int y)  
{
 switch (button)
 {
 case GLUT_LEFT_BUTTON:
   if (state == GLUT_DOWN)
   {  
  a=x;
  b=y;
  glutIdleFunc(renderScene);
  break;
  //n=n+2;
   }  
 default:
  glutIdleFunc(NULL);
  break;
 }
}
 
 
 
void main(int argc, char **argv) {
 glutInit(&argc, argv);
 glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
 
 glutInitWindowPosition(0,0);
 glutInitWindowSize(screenWidth,screenHeight);
 glutCreateWindow("3D Tech- GLUT Tutorial" );
    glutMouseFunc(processMouse);
 
 glutDisplayFunc(renderScene);
  glutIdleFunc(renderScene);
 
 
 
 // Here is our new entry in the main function  
 glutReshapeFunc(changeSize);
 glEnable(GL_DEPTH_TEST);
 glEnableClientState(GL_VERTEX_ARRAY);
  glEnable(GL_DEPTH_TEST);
 
 glutMainLoop();
}
 


Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » C / C++ / Java » Visual C++ et GLUT : système de coodonnées
 

Annonces Google
Publicité
Les ressources relatives