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

GIS编程

开发平台:

Visual C++

  1. /* 
  2.  * screw.c
  3.  * 
  4.  * FUNCTION:
  5.  * Draws a screw shape.
  6.  *
  7.  * HISTORY:
  8.  * -- created by Linas Vepstas October 1991
  9.  * -- heavily modified to draw more texas shapes, Feb 1993, Linas
  10.  * -- converted to use GLUT -- December 1995, Linas
  11.  *
  12.  */
  13. /* required include files */
  14. #include <stdlib.h>
  15. #include <math.h>
  16. #include <GL/glut.h>
  17. #include <GL/tube.h>
  18. /* =========================================================== */
  19. #define SCALE 1.3
  20. #define CONTOUR(x,y) {
  21.    double ax, ay, alen;
  22.    contour[i][0] = SCALE * (x);
  23.    contour[i][1] = SCALE * (y);
  24.    if (i!=0) {
  25.       ax = contour[i][0] - contour[i-1][0];
  26.       ay = contour[i][1] - contour[i-1][1];
  27.       alen = 1.0 / sqrt (ax*ax + ay*ay);
  28.       ax *= alen;   ay *= alen;
  29.       norms [i-1][0] = ay;
  30.       norms [i-1][1] = -ax;
  31.    }
  32.    i++;
  33. }
  34. #define NUM_PTS (25)
  35. double contour [NUM_PTS][2];
  36. double norms [NUM_PTS][2];
  37. void init_contour (void)
  38. {
  39.    int i;
  40.    /* outline of extrusion */
  41.    i=0;
  42.    CONTOUR (1.0, 1.0);
  43.    CONTOUR (1.0, 2.9);
  44.    CONTOUR (0.9, 3.0);
  45.    CONTOUR (-0.9, 3.0);
  46.    CONTOUR (-1.0, 2.9);
  47.    CONTOUR (-1.0, 1.0);
  48.    CONTOUR (-2.9, 1.0);
  49.    CONTOUR (-3.0, 0.9);
  50.    CONTOUR (-3.0, -0.9);
  51.    CONTOUR (-2.9, -1.0);
  52.    CONTOUR (-1.0, -1.0);
  53.    CONTOUR (-1.0, -2.9);
  54.    CONTOUR (-0.9, -3.0);
  55.    CONTOUR (0.9, -3.0);
  56.    CONTOUR (1.0, -2.9);
  57.    CONTOUR (1.0, -1.0);
  58.    CONTOUR (2.9, -1.0);
  59.    CONTOUR (3.0, -0.9);
  60.    CONTOUR (3.0, 0.9);
  61.    CONTOUR (2.9, 1.0);
  62.    CONTOUR (1.0, 1.0);   /* repeat so that last normal is computed */
  63. }
  64.    
  65. /* =========================================================== */
  66. extern float lastx;
  67. extern float lasty;
  68. extern void TextureStyle (int msg);
  69. void InitStuff (void)
  70. {
  71.    int style;
  72.    /* pick model-vertex-cylinder coords for texture mapping */
  73.    TextureStyle (509);
  74.    /* configure the pipeline */
  75.    style = TUBE_JN_CAP;
  76.    style |= TUBE_CONTOUR_CLOSED;
  77.    style |= TUBE_NORM_FACET;
  78.    style |= TUBE_JN_ANGLE;
  79.    gleSetJoinStyle (style);
  80.    lastx = 121.0;
  81.    lasty = 121.0;
  82.    init_contour();
  83. }
  84. /* =========================================================== */
  85. void DrawStuff (void) {
  86.    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  87.    glColor3f (0.5, 0.6, 0.6);
  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 (130.0, 0.0, 1.0, 0.0);
  92.    glRotatef (65.0, 1.0, 0.0, 0.0);
  93.    /* draw the brand and the handle */
  94.    gleScrew (20, contour, norms, 
  95.                  NULL, -6.0, 9.0, lasty);
  96.    glPopMatrix ();
  97.    glutSwapBuffers ();
  98. }
  99. /* ===================== END OF FILE ================== */