// example file for glut-gl // author: Matteo Lucarelli #include #include #include #include #define TIME_MS 50 int ang=0; int solid=0; void display_cb() { glClear(GL_COLOR_BUFFER_BIT); glColor3d( 1.0, 1.0, 1.0 ); glLoadIdentity(); // x,y,z (posizione) // x1,y1,z1 (direzione sguardo) // vx,vy,vz (direzione alto) gluLookAt(4*sin(ang/180.0*M_PI),0,4*cos(ang/180.0*M_PI),0,0,0,0,1,0); switch (solid){ case 0: glutWireTetrahedron();break; case 1: glutWireCube(1);break; case 2: glutWireOctahedron();break; case 3: glutWireDodecahedron();break; case 4: glutWireIcosahedron();break; } glutSwapBuffers( ); } void reshape_cb(int w,int h) { glViewport(0,0,(GLsizei)w,(GLsizei)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); // view-angle-y,x-y-ratio,clip-near,clip-far gluPerspective(60,1,0,20); glMatrixMode(GL_MODELVIEW); } void timer_cb(int val) { // set next timer glutTimerFunc(TIME_MS,timer_cb,0); ang=(ang+5)%360; glutPostRedisplay( ); } void mouse_cb( int button, int updown, int x, int y ) { if(updown == GLUT_DOWN) solid=++solid%5; } int main(int argc, char** argv) { glutInit( &argc, argv ); glutInitDisplayMode( GLUT_DOUBLE ); glutInitWindowSize( 200, 200 ); glutCreateWindow("click me"); glutDisplayFunc(display_cb); glutReshapeFunc(reshape_cb); glutTimerFunc(TIME_MS,timer_cb,0); glutMouseFunc( mouse_cb ); glutMainLoop(); return 0; }