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

GIS编程

开发平台:

Visual C++

  1. /* Copyright (c) Mark J. Kilgard, 1997. */
  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. /* molehill uses the GLU NURBS routines to draw some nice surfaces. */
  6. #include <GL/glut.h>
  7. GLfloat mat_red_diffuse[] = { 0.7, 0.0, 0.1, 1.0 };
  8. GLfloat mat_green_diffuse[] = { 0.0, 0.7, 0.1, 1.0 };
  9. GLfloat mat_blue_diffuse[] = { 0.0, 0.1, 0.7, 1.0 };
  10. GLfloat mat_yellow_diffuse[] = { 0.7, 0.8, 0.1, 1.0 };
  11. GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
  12. GLfloat mat_shininess[] = { 100.0 };
  13. GLfloat knots[8] = { 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0 };
  14. GLfloat pts1[4][4][3], pts2[4][4][3];
  15. GLfloat pts3[4][4][3], pts4[4][4][3];
  16. GLUnurbsObj *nurb;
  17. int u, v;
  18. static void 
  19. display(void)
  20. {
  21.   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  22.   glCallList(1);
  23.   glFlush();
  24. }
  25. int 
  26. main(int argc, char **argv)
  27. {
  28.   glutInit(&argc, argv);
  29.   glutInitDisplayString("luminance depth");
  30.   glutCreateWindow("molehill");
  31.   glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
  32.   glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
  33.   glEnable(GL_LIGHTING);
  34.   glEnable(GL_LIGHT0);
  35.   glEnable(GL_DEPTH_TEST);
  36.   glEnable(GL_AUTO_NORMAL);
  37.   glEnable(GL_NORMALIZE);
  38.   nurb = gluNewNurbsRenderer();
  39.   gluNurbsProperty(nurb, GLU_SAMPLING_TOLERANCE, 25.0);
  40.   gluNurbsProperty(nurb, GLU_DISPLAY_MODE, GLU_FILL);
  41.   /* Build control points for NURBS mole hills. */
  42.   for(u=0; u<4; u++) {
  43.     for(v=0; v<4; v++) {
  44.       /* Red. */
  45.       pts1[u][v][0] = 2.0*((GLfloat)u);
  46.       pts1[u][v][1] = 2.0*((GLfloat)v);
  47.       if((u==1 || u == 2) && (v == 1 || v == 2))
  48. /* Stretch up middle. */
  49. pts1[u][v][2] = 6.0;
  50.       else
  51. pts1[u][v][2] = 0.0;
  52.       /* Green. */
  53.       pts2[u][v][0] = 2.0*((GLfloat)u - 3.0);
  54.       pts2[u][v][1] = 2.0*((GLfloat)v - 3.0);
  55.       if((u==1 || u == 2) && (v == 1 || v == 2))
  56. if(u == 1 && v == 1) 
  57.   /* Pull hard on single middle square. */
  58.   pts2[u][v][2] = 15.0;
  59. else
  60.   /* Push down on other middle squares. */
  61.   pts2[u][v][2] = -2.0;
  62.       else
  63. pts2[u][v][2] = 0.0;
  64.       /* Blue. */
  65.       pts3[u][v][0] = 2.0*((GLfloat)u - 3.0);
  66.       pts3[u][v][1] = 2.0*((GLfloat)v);
  67.       if((u==1 || u == 2) && (v == 1 || v == 2))
  68. if(u == 1 && v == 2)
  69.   /* Pull up on single middple square. */
  70.   pts3[u][v][2] = 11.0;
  71. else
  72.   /* Pull up slightly on other middle squares. */
  73.   pts3[u][v][2] = 2.0;
  74.       else
  75. pts3[u][v][2] = 0.0;
  76.       /* Yellow. */
  77.       pts4[u][v][0] = 2.0*((GLfloat)u);
  78.       pts4[u][v][1] = 2.0*((GLfloat)v - 3.0);
  79.       if((u==1 || u == 2 || u == 3) && (v == 1 || v == 2))
  80. if(v == 1) 
  81.   /* Push down front middle and right squares. */
  82.   pts4[u][v][2] = -2.0;
  83. else
  84.   /* Pull up back middle and right squares. */
  85.   pts4[u][v][2] = 5.0;
  86.       else
  87. pts4[u][v][2] = 0.0;
  88.     }
  89.   }
  90.   /* Stretch up red's far right corner. */
  91.   pts1[3][3][2] = 6;
  92.   /* Pull down green's near left corner a little. */
  93.   pts2[0][0][2] = -2;
  94.   /* Turn up meeting of four corners. */
  95.   pts1[0][0][2] = 1;
  96.   pts2[3][3][2] = 1;
  97.   pts3[3][0][2] = 1;
  98.   pts4[0][3][2] = 1;
  99.   glMatrixMode(GL_PROJECTION);
  100.   gluPerspective(55.0, 1.0, 2.0, 24.0);
  101.   glMatrixMode(GL_MODELVIEW);
  102.   glTranslatef(0.0, 0.0, -15.0);
  103.   glRotatef(330.0, 1.0, 0.0, 0.0);
  104.   glNewList(1, GL_COMPILE);
  105.     /* Render red hill. */
  106.     glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_red_diffuse);
  107.     gluBeginSurface(nurb);
  108.       gluNurbsSurface(nurb, 8, knots, 8, knots,
  109.         4 * 3, 3, &pts1[0][0][0],
  110.         4, 4, GL_MAP2_VERTEX_3);
  111.     gluEndSurface(nurb);
  112.     /* Render green hill. */
  113.     glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_green_diffuse);
  114.     gluBeginSurface(nurb);
  115.       gluNurbsSurface(nurb, 8, knots, 8, knots,
  116.         4 * 3, 3, &pts2[0][0][0],
  117.         4, 4, GL_MAP2_VERTEX_3);
  118.     gluEndSurface(nurb);
  119.     /* Render blue hill. */
  120.     glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_blue_diffuse);
  121.     gluBeginSurface(nurb);
  122.       gluNurbsSurface(nurb, 8, knots, 8, knots,
  123.         4 * 3, 3, &pts3[0][0][0],
  124.         4, 4, GL_MAP2_VERTEX_3);
  125.     gluEndSurface(nurb);
  126.     /* Render yellow hill. */
  127.     glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_yellow_diffuse);
  128.     gluBeginSurface(nurb);
  129.       gluNurbsSurface(nurb, 8, knots, 8, knots,
  130.         4 * 3, 3, &pts4[0][0][0],
  131.         4, 4, GL_MAP2_VERTEX_3);
  132.     gluEndSurface(nurb);
  133.   glEndList();
  134.   glutDisplayFunc(display);
  135.   glutMainLoop();
  136.   return 0;             /* ANSI C requires main to return int. */
  137. }