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

GIS编程

开发平台:

Visual C++

  1. /* 
  2.  * main for exhibiting differnt join styles
  3.  *
  4.  * FUNCTION:
  5.  * This demo demonstrates the various join styles,
  6.  * and how they get applied.
  7.  *
  8.  * HISTORY:
  9.  * Linas Vepstas March 1995
  10.  */
  11. /* required include files */
  12. #include <stdlib.h>
  13. #include <GL/glut.h>
  14. #include <GL/tube.h>
  15. extern void InitStuff (void);
  16. extern void DrawStuff (void);
  17. float lastx=0;
  18. float lasty=0;
  19. /* get notified of mouse motions */
  20. void MouseMotion (int x, int y)
  21. {
  22.    lastx = x;
  23.    lasty = y;
  24.    glutPostRedisplay ();
  25. }
  26. void JoinStyle (int msg) 
  27. {
  28.    int style;
  29.    /* get the current joint style */
  30.    style = gleGetJoinStyle ();
  31.    /* there are four different join styles, 
  32.     * and two different normal vector styles */
  33.    switch (msg) {
  34.       case 0:
  35.          style &= ~TUBE_JN_MASK;
  36.          style |= TUBE_JN_RAW;
  37.          break;
  38.       case 1:
  39.          style &= ~TUBE_JN_MASK;
  40.          style |= TUBE_JN_ANGLE;
  41.          break;
  42.       case 2:
  43.          style &= ~TUBE_JN_MASK;
  44.          style |= TUBE_JN_CUT;
  45.          break;
  46.       case 3:
  47.          style &= ~TUBE_JN_MASK;
  48.          style |= TUBE_JN_ROUND;
  49.          break;
  50.       case 20:
  51.          style &= ~TUBE_NORM_MASK;
  52.          style |= TUBE_NORM_FACET;
  53.          break;
  54.       case 21:
  55.          style &= ~TUBE_NORM_MASK;
  56.          style |= TUBE_NORM_EDGE;
  57.          break;
  58.       case 99:
  59.          exit (0);
  60.       default:
  61.          break;
  62.    }
  63.    gleSetJoinStyle (style);
  64.    glutPostRedisplay ();
  65. }
  66. /* set up a light */
  67. GLfloat lightOnePosition[] = {40.0, 40, 100.0, 0.0};
  68. GLfloat lightOneColor[] = {0.99, 0.99, 0.99, 1.0}; 
  69. GLfloat lightTwoPosition[] = {-40.0, 40, 100.0, 0.0};
  70. GLfloat lightTwoColor[] = {0.99, 0.99, 0.99, 1.0}; 
  71. int
  72. main (int argc, char * argv[]) {
  73.    /* initialize glut */
  74.    glutInit (&argc, argv);
  75.    glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  76.    glutCreateWindow ("join styles");
  77.    glutDisplayFunc (DrawStuff);
  78.    glutMotionFunc (MouseMotion);
  79.    /* create popup menu */
  80.    glutCreateMenu (JoinStyle);
  81.    glutAddMenuEntry ("Raw Join Style", 0);
  82.    glutAddMenuEntry ("Angle Join Style", 1);
  83.    glutAddMenuEntry ("Cut Join Style", 2);
  84.    glutAddMenuEntry ("Round Join Style", 3);
  85.    glutAddMenuEntry ("------------------", 9999);
  86.    glutAddMenuEntry ("Facet Normal Vectors", 20);
  87.    glutAddMenuEntry ("Edge Normal Vectors", 21);
  88.    glutAddMenuEntry ("------------------", 9999);
  89.    glutAddMenuEntry ("Exit", 99);
  90.    glutAttachMenu (GLUT_MIDDLE_BUTTON);
  91.    /* initialize GL */
  92.    glClearDepth (1.0);
  93.    glEnable (GL_DEPTH_TEST);
  94.    glClearColor (0.0, 0.0, 0.0, 0.0);
  95.    glShadeModel (GL_SMOOTH);
  96.    glMatrixMode (GL_PROJECTION);
  97.    /* roughly, measured in centimeters */
  98.    glFrustum (-9.0, 9.0, -9.0, 9.0, 50.0, 150.0);
  99.    glMatrixMode(GL_MODELVIEW);
  100.    /* initialize lighting */
  101.    glLightfv (GL_LIGHT0, GL_POSITION, lightOnePosition);
  102.    glLightfv (GL_LIGHT0, GL_DIFFUSE, lightOneColor);
  103.    glEnable (GL_LIGHT0);
  104.    glLightfv (GL_LIGHT1, GL_POSITION, lightTwoPosition);
  105.    glLightfv (GL_LIGHT1, GL_DIFFUSE, lightTwoColor);
  106.    glEnable (GL_LIGHT1);
  107.    glEnable (GL_LIGHTING);
  108.    glEnable (GL_NORMALIZE);
  109.    glColorMaterial (GL_FRONT_AND_BACK, GL_DIFFUSE);
  110.    glEnable (GL_COLOR_MATERIAL);
  111.    InitStuff ();
  112.    glutMainLoop ();
  113.    return 0;             /* ANSI C requires main to return int. */
  114. }
  115. /* ------------------ end of file -------------------- */