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

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. /* This test makes sure that if you post a redisplay within a
  6.    display callback, another display callback will be
  7.    generated. I believe this is useful for progressive
  8.    refinement of an image.  Draw it once at a coarse
  9.    tesselation to get something on the screen; then redraw at a
  10.    higher level of tesselation.  Pre-GLUT 2.3 fails this test. */
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #include <GL/glut.h>
  14. GLfloat light_diffuse[] =
  15. {1.0, 0.0, 0.0, 1.0};
  16. GLfloat light_position[] =
  17. {1.0, 1.0, 1.0, 0.0};
  18. GLUquadricObj *qobj;
  19. void
  20. displayFunc(void)
  21. {
  22.   static int tesselation = 3;
  23.   fprintf(stderr, " %d", tesselation);
  24.   if (tesselation > 23) {
  25.     printf("nPASS: test15n");
  26.     exit(0);
  27.   }
  28.   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  29.   gluSphere(qobj, /* radius */ 1.0,
  30.     /* slices */ tesselation, /* stacks */ tesselation);
  31.   glutSwapBuffers();
  32.   tesselation += 1;
  33.   glutPostRedisplay();
  34. }
  35. /* ARGSUSED */
  36. void
  37. timefunc(int value)
  38. {
  39.   printf("nFAIL: test15n");
  40.   exit(1);
  41. }
  42. int
  43. main(int argc, char **argv)
  44. {
  45.   glutInit(&argc, argv);
  46.   glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGB);
  47.   glutCreateWindow("test15");
  48.   glutDisplayFunc(displayFunc);
  49.   qobj = gluNewQuadric();
  50.   gluQuadricDrawStyle(qobj, GLU_FILL);
  51.   glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
  52.   glLightfv(GL_LIGHT0, GL_POSITION, light_position);
  53.   glEnable(GL_LIGHTING);
  54.   glEnable(GL_LIGHT0);
  55.   glEnable(GL_DEPTH_TEST);
  56.   glMatrixMode(GL_PROJECTION);
  57.   gluPerspective( /* field of view in degree */ 22.0,
  58.   /* aspect ratio */ 1.0,
  59.     /* Z near */ 1.0, /* Z far */ 10.0);
  60.   glMatrixMode(GL_MODELVIEW);
  61.   gluLookAt(0.0, 0.0, 5.0,  /* eye is at (0,0,5) */
  62.     0.0, 0.0, 0.0,      /* center is at (0,0,0) */
  63.     0.0, 1.0, 0.);      /* up is in postivie Y direction */
  64.   glTranslatef(0.0, 0.0, -1.0);
  65.   /* Have a reasonably large timeout since some machines make
  66.      take a while to render all those polygons. */
  67.   glutTimerFunc(15000, timefunc, 1);
  68.   fprintf(stderr, "tesselations =");
  69.   glutMainLoop();
  70.   return 0;             /* ANSI C requires main to return int. */
  71. }