TP4 : Interaction avec l´utilisateur
Fichier : 2007/TP/draw.cpp #include "glut_import.h"
/*********************************************************************
* GLOBAL DATA
*********************************************************************/
#define MAX_COUNT 10000
struct {
int Count;
int Points[MAX_COUNT][2];
} Data={
0
};
/*********************************************************************
* GLUT CALLBACKS
*********************************************************************/
void reshapeFunc(int width,int height){
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0,width,height,0);
}
void displayFunc(void){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_LINE_STRIP);
for (int i=0;i<Data.Count;i++)
glVertex2iv(Data.Points[i]);
glEnd();
glFlush();
glutSwapBuffers();
}
void mouseFunc(int button,int state,int x,int y){
if (state==GLUT_DOWN)
Data.Count=0;
glutPostRedisplay();
}
void motionFunc(int x,int y){
if (Data.Count<MAX_COUNT){
Data.Points[Data.Count][0]=x;
Data.Points[Data.Count][1]=y;
Data.Count++;
}
glutPostRedisplay();
}
/*********************************************************************
* MAIN PROGRAM
*********************************************************************/
int main(int argc,char *argv[]){
int a=800,b=600,x,y;
glutInit(&argc,argv);
x=glutGet(GLUT_SCREEN_WIDTH);
y=glutGet(GLUT_SCREEN_HEIGHT);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowPosition((x-a)/2,(y-b)/2);
glutInitWindowSize(a,b);
glutCreateWindow("Drawing");
glutReshapeFunc(reshapeFunc);
glutDisplayFunc(displayFunc);
glutMouseFunc(mouseFunc);
glutMotionFunc(motionFunc);
glutMainLoop();
} Ce document a été traduit de LaTeX par HeVeA |