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

GIS编程

开发平台:

Visual C++

  1. /* 
  2.  * cone drawing demo 
  3.  *
  4.  * FUNCTION:
  5.  * Baisc demo illustrating how to write code to draw
  6.  * the most basic cone shape.
  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 6
  16. double radii [NPTS];
  17. double points [NPTS][3];
  18. float colors [NPTS][3];
  19. int idx = 0;
  20. /* some utilities for filling that array */
  21. #define PNT(x,y,z) { 
  22.    points[idx][0] = x; 
  23.    points[idx][1] = y; 
  24.    points[idx][2] = z;
  25.    idx ++;
  26. }
  27. #define COL(r,g,b) { 
  28.    colors[idx][0] = r; 
  29.    colors[idx][1] = g; 
  30.    colors[idx][2] = b;
  31. }
  32. #define RAD(r) {
  33.    radii[idx] = r;
  34. }
  35. /* 
  36.  * Initialize a bent shape with three segments. 
  37.  * The data format is a polyline.
  38.  *
  39.  * NOTE that neither the first, nor the last segment are drawn.
  40.  * The first & last segment serve only to determine that angle 
  41.  * at which the endcaps are drawn.
  42.  */
  43. void InitStuff (void) {
  44.    /* initialize the join style here */
  45.    gleSetJoinStyle (TUBE_NORM_EDGE | TUBE_JN_ANGLE | TUBE_JN_CAP);
  46.    RAD (1.0);
  47.    COL (0.0, 0.0, 0.0);
  48.    PNT (-6.0, 6.0, 0.0);
  49.    RAD (1.0);
  50.    COL (0.0, 0.8, 0.3);
  51.    PNT (6.0, 6.0, 0.0);
  52.    RAD (3.0);
  53.    COL (0.8, 0.3, 0.0);
  54.    PNT (6.0, -6.0, 0.0);
  55.    RAD (0.5);
  56.    COL (0.2, 0.3, 0.9);
  57.    PNT (-6.0, -6.0, 0.0);
  58.    RAD (2.0);
  59.    COL (0.2, 0.8, 0.5);
  60.    PNT (-6.0, 6.0, 0.0);
  61.    RAD (1.0);
  62.    COL (0.0, 0.0, 0.0);
  63.    PNT (6.0, 6.0, 0.0);
  64. }
  65. extern float lastx;
  66. extern float lasty;
  67. /* draw the polycone shape */
  68. void DrawStuff (void) {
  69.    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  70.    /* set up some matrices so that the object spins with the mouse */
  71.    glPushMatrix ();
  72.    glTranslatef (0.0, 0.0, -80.0);
  73.    glRotatef (lastx, 0.0, 1.0, 0.0);
  74.    glRotatef (lasty, 1.0, 0.0, 0.0);
  75.    /* Phew. FINALLY, Draw the polycone  -- */
  76.    glePolyCone (idx, points, colors, radii);
  77.    glPopMatrix ();
  78.    glutSwapBuffers ();
  79. }
  80. /* --------------------------- end of file ------------------- */