home *** CD-ROM | disk | FTP | other *** search
/ gondwana.ecr.mu.oz.au/pub/ / Graphics.tar / Graphics / fermiVogle.tar.Z / fermiVogle.tar / devel / examples / os2pm / balls.c next >
C/C++ Source or Header  |  1996-02-07  |  2KB  |  152 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.     vinit("os2pm");
  63.  
  64.     /*
  65.      * set up our viewing transformation
  66.      */
  67.     perspective(90.0, 1.0, 0.001, 500.0);
  68.     lookat(13.0, 13.0, 8.0, 0.0, 0.0, 0.0, 0.0);
  69.  
  70.     color(BLACK);
  71.     clear();
  72.  
  73.     /*
  74.      * Call a routine to make the sphere object
  75.      */
  76.     makesphere();
  77.  
  78.     /*
  79.      * Now draw the sphere object scaled down. We use the pushmatrix
  80.      * and the popmatrix to preserve the transformation matrix so
  81.      * that only this sphere is drawn scaled.
  82.      */
  83.     color(CYAN);
  84.  
  85.     pushmatrix();
  86.         scale(0.5, 0.5, 0.5);
  87.         callobj(SPHERE);
  88.     popmatrix();
  89.  
  90.     /*
  91.      * now we draw the same sphere translated, with a different
  92.      * scale and color.
  93.      */
  94.  
  95.     color(WHITE);
  96.  
  97.     pushmatrix();
  98.         translate(0.0, -1.4 * RADIUS, 1.4 * RADIUS);
  99.         scale(0.3, 0.3, 0.3);
  100.         callobj(SPHERE);
  101.     popmatrix();
  102.  
  103.     /*
  104.      * and maybe a few more times....
  105.      */
  106.  
  107.  
  108.     color(RED);
  109.  
  110.     pushmatrix();
  111.         translate(0.0, RADIUS, 0.7 * RADIUS);
  112.         scale(0.2, 0.2, 0.2);
  113.         callobj(SPHERE);
  114.     popmatrix();
  115.  
  116.     color(GREEN);
  117.  
  118.     pushmatrix();
  119.         translate(0.0, 1.5 * RADIUS, -RADIUS);
  120.         scale(0.15, 0.15, 0.15);
  121.         callobj(SPHERE);
  122.     popmatrix();
  123.  
  124.     color(YELLOW);
  125.  
  126.     pushmatrix();
  127.         translate(0.0, -RADIUS, -RADIUS);
  128.         scale(0.12, 0.12, 0.12);
  129.         callobj(SPHERE);
  130.     popmatrix();
  131.  
  132.     color(BLUE);
  133.  
  134.     pushmatrix();
  135.         translate(0.0, -2.0*RADIUS, -RADIUS);
  136.         scale(0.3, 0.3, 0.3);
  137.         callobj(SPHERE);
  138.     popmatrix();
  139.  
  140.     font("times.rb");
  141.     ortho2(0.0, 1.0, 0.0, 1.0);
  142.     centertext(1);
  143.     textsize(0.08, 0.15);
  144.     move2(0.8, 0.5);
  145.     textang(-90.0);
  146.     drawstr("I'm very ordinary!");
  147.  
  148.     getkey();
  149.  
  150.     vexit();
  151. }
  152.