home *** CD-ROM | disk | FTP | other *** search
/ gondwana.ecr.mu.oz.au/pub/ / Graphics.tar / Graphics / VOGLE.ZIP / EXAMPLES / SUNVIEW / BALLS.C next >
C/C++ Source or Header  |  1994-04-27  |  2KB  |  143 lines

  1. #include <stdio.h>
  2. #include "vogle.h"
  3.  
  4. #include <math.h>
  5.  
  6. #define RADIUS 10.0
  7. #define    SPHERE    1
  8.  
  9. static int    inited = 0;
  10.  
  11. /*
  12.  * makesphere
  13.  *
  14.  *    make a sphere object
  15.  */
  16. makesphere()
  17. {
  18.     float    i, r, z, a;
  19.  
  20.     makeobj(SPHERE);
  21.  
  22.         /*
  23.          * create the latitudinal rings
  24.          */
  25.         for (i = 0; i < 180; i += 20) {
  26.             pushmatrix();
  27.                 rotate(i, 'y');
  28.                 circle(0.0, 0.0, RADIUS);
  29.             popmatrix();
  30.         }
  31.         
  32.         /*
  33.          * create the longitudinal rings
  34.          */
  35.         pushmatrix();
  36.             rotate(90.0, 'x');
  37.             for (a = -90.0; a < 90.0; a += 20.0) {
  38.                 r = RADIUS * cos((double)a * PI / 180.0);
  39.                 z = RADIUS * sin((double)a * PI / 180.0);
  40.                 pushmatrix();
  41.                     translate(0.0, 0.0, -z);
  42.                     circle(0.0, 0.0, r);
  43.                 popmatrix();    
  44.             }
  45.         popmatrix();
  46.  
  47.     closeobj();
  48. }
  49.  
  50. /*
  51.  * a demonstration of objects
  52.  */
  53. draw_balls()
  54. {
  55.     if (!inited) {
  56.         inited = 1;
  57.         fprintf(stderr, "Initialising\n");
  58.         vsetflush(0);
  59.  
  60.         /*
  61.          * set up our viewing transformation
  62.          */
  63.         perspective(90.0, 1.0, 0.001, 500.0);
  64.         lookat(13.0, 13.0, 8.0, 0.0, 0.0, 0.0, 0.0);
  65.  
  66.         /*
  67.          * Call a routine to make the sphere object
  68.          */
  69.         makesphere();
  70.     }
  71.  
  72.     /*
  73.      * Now draw the sphere object scaled down. We use the pushmatrix
  74.      * and the popmatrix to preserve the transformation matrix so
  75.      * that only this sphere is drawn scaled.
  76.      */
  77.     color(CYAN);
  78.  
  79.     pushmatrix();
  80.         scale(0.5, 0.5, 0.5);
  81.         callobj(SPHERE);
  82.     popmatrix();
  83.  
  84.     /*
  85.      * now we draw the same sphere translated, with a different
  86.      * scale and color.
  87.      */
  88.  
  89.     color(WHITE);
  90.  
  91.     pushmatrix();
  92.         translate(0.0, -1.4 * RADIUS, 1.4 * RADIUS);
  93.         scale(0.3, 0.3, 0.3);
  94.         callobj(SPHERE);
  95.     popmatrix();
  96.  
  97.     /*
  98.      * and maybe a few more times....
  99.      */
  100.  
  101.  
  102.     color(RED);
  103.  
  104.     pushmatrix();
  105.         translate(0.0, RADIUS, 0.7 * RADIUS);
  106.         scale(0.2, 0.2, 0.2);
  107.         callobj(SPHERE);
  108.     popmatrix();
  109.  
  110.     color(GREEN);
  111.  
  112.     pushmatrix();
  113.         translate(0.0, 1.5 * RADIUS, -RADIUS);
  114.         scale(0.15, 0.15, 0.15);
  115.         callobj(SPHERE);
  116.     popmatrix();
  117.  
  118.     color(YELLOW);
  119.  
  120.     pushmatrix();
  121.         translate(0.0, -RADIUS, -RADIUS);
  122.         scale(0.12, 0.12, 0.12);
  123.         callobj(SPHERE);
  124.     popmatrix();
  125.  
  126.     color(BLUE);
  127.  
  128.     pushmatrix();
  129.         translate(0.0, -2.0*RADIUS, -RADIUS);
  130.         scale(0.3, 0.3, 0.3);
  131.         callobj(SPHERE);
  132.     popmatrix();
  133.  
  134.     font("times.rb");
  135.     ortho2(0.0, 1.0, 0.0, 1.0);
  136.     centertext(1);
  137.     textsize(0.08, 0.15);
  138.     move2(0.8, 0.5);
  139.     textang(-90.0);
  140.     drawstr("I'm very ordinary!");
  141.     vflush();
  142. }
  143.