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

GIS编程

开发平台:

Visual C++

  1. /* 
  2.  * hron -- cone drawing demo 
  3.  *
  4.  * FUNCTION:
  5.  * Baisc demo illustrating how to write code to draw
  6.  * the a slightly fancier "polycone".
  7.  *
  8.  * HISTORY:
  9.  * Linas Vepstas March 1995
  10.  */
  11. /* required include files */
  12. #include <GL/glut.h>
  13. #include <GL/tube.h>
  14. /* the arrays in which we will store out polyline */
  15. #define NPTS 26
  16. double radii [NPTS];
  17. double points [NPTS][3];
  18. int idx = 0;
  19. /* some utilities for filling that array */
  20. #define PNT(x,y,z) { 
  21.    points[idx][0] = x; 
  22.    points[idx][1] = y; 
  23.    points[idx][2] = z;
  24.    idx ++;
  25. }
  26. #define RAD(r) {
  27.    radii[idx] = r;
  28. }
  29. /* 
  30.  * Initialize a bent shape with three segments. 
  31.  * The data format is a polyline.
  32.  *
  33.  * NOTE that neither the first, nor the last segment are drawn.
  34.  * The first & last segment serve only to determine that angle 
  35.  * at which the endcaps are drawn.
  36.  */
  37. void InitStuff (void) {
  38.    /* initialize the join style here */
  39.    gleSetJoinStyle (TUBE_NORM_PATH_EDGE | TUBE_JN_ANGLE );
  40.    RAD (0.3);
  41.    PNT (-4.9, 6.0, 0.0);
  42.    RAD (0.3);
  43.    PNT (-4.8, 5.8, 0.0);
  44.    RAD (0.3);
  45.    PNT (-3.8, 5.8, 0.0);
  46.    RAD (0.6);
  47.    PNT (-3.5, 6.0, 0.0);
  48.    RAD (0.8);
  49.    PNT (-3.0, 7.0, 0.0);
  50.    RAD (0.9);
  51.    PNT (-2.4, 7.6, 0.0);
  52.    RAD (1.0);
  53.    PNT (-1.8, 7.6, 0.0);
  54.    RAD (1.1);
  55.    PNT (-1.2, 7.1, 0.0);
  56.    RAD (1.2);
  57.    PNT (-0.8, 5.1, 0.0);
  58.    RAD (1.7);
  59.    PNT (-0.3, -2.0, 0.0);
  60.    RAD (1.8);
  61.    PNT (-0.2, -7.0, 0.0);
  62.    RAD (2.0);
  63.    PNT (0.3, -7.8, 0.0);
  64.    RAD (2.1);
  65.    PNT (0.8, -8.2, 0.0);
  66.    RAD (2.25);
  67.    PNT (1.8, -8.6, 0.0);
  68.    RAD (2.4);
  69.    PNT (3.6, -8.6, 0.0);
  70.    RAD (2.5);
  71.    PNT (4.5, -8.2, 0.0);
  72.    RAD (2.6);
  73.    PNT (4.8, -7.5, 0.0);
  74.    RAD (2.7);
  75.    PNT (5.0, -6.0, 0.0);
  76.    RAD (3.2);
  77.    PNT (6.4, -2.0, 0.0);
  78.    RAD (4.1);
  79.    PNT (6.9, -1.0, 0.0);
  80.    RAD (4.1);
  81.    PNT (7.8, 0.5, 0.0);
  82. }
  83. extern float lastx;
  84. extern float lasty;
  85. /* draw the polycone shape */
  86. void DrawStuff (void) {
  87.    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  88.    /* set up some matrices so that the object spins with the mouse */
  89.    glPushMatrix ();
  90.    glTranslatef (0.0, 0.0, -80.0);
  91.    glRotatef (lastx, 0.0, 1.0, 0.0);
  92.    glRotatef (lasty, 1.0, 0.0, 0.0);
  93.    glColor3f (0.5, 0.5, 0.2);
  94.    /* Phew. FINALLY, Draw the polycone  -- */
  95.    glePolyCone (idx, points, 0x0, radii);
  96.    glPopMatrix ();
  97.    glutSwapBuffers ();
  98. }
  99. /* --------------------------- end of file ------------------- */