home *** CD-ROM | disk | FTP | other *** search
/ gondwana.ecr.mu.oz.au/pub/ / Graphics.tar / Graphics / VOGLE.ZIP / VOGLE / EXAMPLES / BALLS.C next >
C/C++ Source or Header  |  2000-02-11  |  3KB  |  159 lines

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