/* * GLUT Shapes Demo * * Written by Nigel Stewart November 2003 * * This program is test harness for the sphere, cone * and torus shapes in GLUT. * * Spinning wireframe and smooth shaded shapes are * displayed until the ESC or q key is pressed. The * number of geometry stacks and slices can be adjusted * using the + and - keys. */ #include #ifdef __APPLE__ #include #else #include #endif #include static int slices = 16; static int stacks = 16; const GLfloat *swiatlo; /* GLUT callback Handlers */ static void resize(int width, int height) { const float ar = (float) width / (float) height; glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity() ; } static void display(void) { const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0; const double a = t*90.0; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3d(1,0,0); //glLightfv (GL_LIGHT0, GL_POSITION, swiatlo); // ustawienie światła pod podłogą glPushMatrix (); glFrontFace (GL_CW); // zmiana domyślnego nawinięcia glScalef (1.0f, -1.0f, 1.0f); // przeskalowanie położenia wszystkich aktorów glPushMatrix(); glTranslated(0,1,-6); glRotated(300,1,0,0); glRotated(a,1,1,0); glutSolidCube(1); glPopMatrix(); glFrontFace (GL_CCW); // przywrócenie domyślnego nawinięcia glPopMatrix (); glDisable (GL_LIGHTING); // wyłączenie oświetlenia glEnable (GL_BLEND); // włączenie mieszania kolorów glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // równanie mieszania kolorów glPushMatrix(); glTranslated(0,0,-7); glRotated(10,1,0,0); double dx = 0.5; double dy = 0.5; glBegin(GL_QUADS); for(double x=-2; x<2; x+=dx) for(double y=-20; y<20;y+=dy) { if(static_cast ((x+y)/dx)%2==0) glColor4f(0,0,1,0.5); else glColor4f(0,1,0,0.5); glVertex3f(x, 0, y); glVertex3f(x, 0, y+dy); glVertex3f(x+dx, 0, y +dy); glVertex3f(x+dx, 0 ,y); } glEnd(); glPopMatrix(); glDisable (GL_BLEND); // wyłączenie mieszania glEnable (GL_LIGHTING); // włączenie oświetlenia //glLightfv (GL_LIGHT0, GL_POSITION, swiatlo); // ustawienie światła nad podłogą glPushMatrix(); glTranslated(0,1,-6); glRotated(60,0,1,1); glRotated(-a,0,0,1); glutSolidCube(1); glPopMatrix(); // ustalenie koloru mgły GLfloat Kolor_mgly[] = {0.5, 0.5, 0.5, 1.0}; // ustawienia parametrów mgły glFogfv(GL_FOG_COLOR, Kolor_mgly); // ustawienie koloru mgły glFogf(GL_FOG_START, 10.0f); // początek mgły glFogf(GL_FOG_END, 100.0f); // koniec mgły glFogf(GL_FOG_DENSITY, 0.2f); // gęstość mgły glFogf(GL_FOG_MODE, GL_EXP); // rozkład mgły glEnable(GL_FOG); // włączeni emgły glutSwapBuffers(); } static void key(unsigned char key, int x, int y) { switch (key) { case 27 : case 'q': exit(0); break; case '+': slices++; stacks++; break; case '-': if (slices>3 && stacks>3) { slices--; stacks--; } break; } glutPostRedisplay(); } static void idle(void) { glutPostRedisplay(); } const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f }; const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f }; const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f }; const GLfloat mat_ambient[] = { 0.7f, 0.7f, 0.7f, 1.0f }; const GLfloat mat_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f }; const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; const GLfloat high_shininess[] = { 100.0f }; /* Program entry point */ int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitWindowSize(640,480); glutInitWindowPosition(10,10); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("GLUT Shapes"); glutReshapeFunc(resize); glutDisplayFunc(display); glutKeyboardFunc(key); glutIdleFunc(idle); glClearColor(1,1,1,1); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); glEnable(GL_LIGHT0); glEnable(GL_NORMALIZE); glEnable(GL_COLOR_MATERIAL); glEnable(GL_LIGHTING); glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess); glutMainLoop(); glColor4f (1.0f, 0.0f, 0.0f, 0.4f); glDisable (GL_LIGHTING); glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glutSolidCube (0.3f); glDisable (GL_BLEND); glEnable (GL_LIGHTING); return EXIT_SUCCESS; }