test16.c
上传用户:xk288cn
上传日期:2007-05-28
资源大小:4876k
文件大小:3k
源码类别:

GIS编程

开发平台:

Visual C++

  1. /* Copyright (c) Mark J. Kilgard, 1994. */
  2. /* This program is freely distributable without licensing fees 
  3.    and is provided without guarantee or warrantee expressed or 
  4.    implied. This program is -not- in the public domain. */
  5. /* Exercise all the GLUT shapes. */
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #ifdef _WIN32
  9. #include <windows.h>
  10. #define sleep(x) Sleep(1000 * x)
  11. #else
  12. #include <unistd.h>
  13. #endif
  14. #include <GL/glut.h>
  15. GLfloat light_diffuse[] =
  16. {1.0, 0.0, 0.0, 1.0};
  17. GLfloat light_position[] =
  18. {1.0, 1.0, 1.0, 0.0};
  19. void
  20. displayFunc(void)
  21. {
  22.   static int shape = 1;
  23.   fprintf(stderr, " %d", shape);
  24.   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  25.   switch (shape) {
  26.   case 1:
  27.     glutWireSphere(1.0, 20, 20);
  28.     break;
  29.   case 2:
  30.     glutSolidSphere(1.0, 20, 20);
  31.     break;
  32.   case 3:
  33.     glutWireCone(1.0, 1.0, 20, 20);
  34.     break;
  35.   case 4:
  36.     glutSolidCone(1.0, 1.0, 20, 20);
  37.     break;
  38.   case 5:
  39.     glutWireCube(1.0);
  40.     break;
  41.   case 6:
  42.     glutSolidCube(1.0);
  43.     break;
  44.   case 7:
  45.     glutWireTorus(0.5, 1.0, 15, 15);
  46.     break;
  47.   case 8:
  48.     glutSolidTorus(0.5, 1.0, 15, 15);
  49.     break;
  50.   case 9:
  51.     glutWireDodecahedron();
  52.     break;
  53.   case 10:
  54.     glutSolidDodecahedron();
  55.     break;
  56.   case 11:
  57.     glutWireTeapot(1.0);
  58.     break;
  59.   case 12:
  60.     glutSolidTeapot(1.0);
  61.     break;
  62.   case 13:
  63.     glutWireOctahedron();
  64.     break;
  65.   case 14:
  66.     glutSolidOctahedron();
  67.     break;
  68.   case 15:
  69.     glutWireTetrahedron();
  70.     break;
  71.   case 16:
  72.     glutSolidTetrahedron();
  73.     break;
  74.   case 17:
  75.     glutWireIcosahedron();
  76.     break;
  77.   case 18:
  78.     glutSolidIcosahedron();
  79.     break;
  80.   default:
  81.     printf("nPASS: test16n");
  82.     exit(0);
  83.   }
  84.   glutSwapBuffers();
  85.   shape += 1;
  86.   sleep(1);
  87.   glutPostRedisplay();
  88. }
  89. /* ARGSUSED */
  90. void
  91. timefunc(int value)
  92. {
  93.   printf("nFAIL: test16n");
  94.   exit(1);
  95. }
  96. int
  97. main(int argc, char **argv)
  98. {
  99.   glutInit(&argc, argv);
  100.   glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGB);
  101.   glutCreateWindow("test16");
  102.   glutDisplayFunc(displayFunc);
  103.   glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
  104.   glLightfv(GL_LIGHT0, GL_POSITION, light_position);
  105.   glEnable(GL_LIGHTING);
  106.   glEnable(GL_LIGHT0);
  107.   glEnable(GL_DEPTH_TEST);
  108.   glMatrixMode(GL_PROJECTION);
  109.   gluPerspective( /* field of view in degree */ 22.0,
  110.   /* aspect ratio */ 1.0,
  111.     /* Z near */ 1.0, /* Z far */ 10.0);
  112.   glMatrixMode(GL_MODELVIEW);
  113.   gluLookAt(0.0, 0.0, 5.0,  /* eye is at (0,0,5) */
  114.     0.0, 0.0, 0.0,      /* center is at (0,0,0) */
  115.     0.0, 1.0, 0.);      /* up is in postivie Y direction */
  116.   glTranslatef(0.0, 0.0, -3.0);
  117.   glRotatef(25, 1.0, 0.0, 0.0);
  118.   /* Have a reasonably large timeout since some machines make
  119.      take a while to render all those polygons. */
  120.   glutTimerFunc(35000, timefunc, 1);
  121.   fprintf(stderr, "shape =");
  122.   glutMainLoop();
  123.   return 0;             /* ANSI C requires main to return int. */
  124. }