home *** CD-ROM | disk | FTP | other *** search
/ gondwana.ecr.mu.oz.au/pub/ / Graphics.tar / Graphics / VOGLE.ZIP / VOGLE / EXAMPLES / WORLD.C < prev   
C/C++ Source or Header  |  2000-02-11  |  3KB  |  154 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.  * most of the things in this program have been done before but it has
  20.  * a certain novelty value.
  21.  */
  22. main()
  23. {
  24.     char    dev[20];
  25.     int    i;
  26.     float    r, z, a;
  27.  
  28.     fprintf(stderr,"Enter device: ");
  29.     gets(dev);
  30.  
  31.     vinit(dev);
  32.     vsetflush(0);
  33.     vdevice.clipoff = 1;
  34.  
  35.     font("futura.m");
  36.  
  37.     perspective(80.0, 1.0, 0.001, 50.0);
  38.     lookat(13.0, 13.0, 8.0, 0.0, 0.0, 0.0, 0.0);
  39.  
  40.     color(BLACK);
  41.     clear();
  42.  
  43.     makesphere();
  44.  
  45.     /*
  46.      * draw the main one in cyan
  47.      */
  48.     color(CYAN);
  49.  
  50.     callobj(SPHERE);
  51.  
  52.     /*
  53.      * draw a smaller one outside the main one in white
  54.      */
  55.     color(WHITE);
  56.  
  57.     pushmatrix();
  58.         translate(0.0, -1.4 * RADIUS, 1.4 * RADIUS);
  59.         scale(0.3, 0.3, 0.3);
  60.         callobj(SPHERE);
  61.     popmatrix();
  62.  
  63.     /*
  64.      * scale the text
  65.      */
  66.     boxfit(2.0 * PI * RADIUS, 0.25 * RADIUS, 31);
  67.  
  68.     /*
  69.      * now write the text in rings around the main sphere
  70.      */
  71.  
  72.     color(GREEN);
  73.     showroundtext("Around the world in eighty days ");
  74.  
  75.     color(BLUE);
  76.     /*
  77.      * note: that software text is rotated here as
  78.      * anything else would be whether you use textang
  79.      * or rotate depends on what you are trying to do.
  80.      * Experience is the best teacher here.
  81.      */
  82.     rotate(90.0, 'x');
  83.     showroundtext("Around the world in eighty days ");
  84.  
  85.     color(RED);
  86.     rotate(90.0, 'z');
  87.     showroundtext("Around the world in eighty days ");
  88.  
  89.     getkey();
  90.  
  91.     vexit();
  92. }
  93.  
  94. /*
  95.  * showroundtext
  96.  *
  97.  *    draw string str wrapped around a circle in 3d
  98.  */
  99. showroundtext(str)
  100.     char    *str;
  101. {
  102.     float    i, inc;
  103.  
  104.     inc = 360.0 / (float)strlen(str);
  105.  
  106.     for (i = 0; i < 360.0; i += inc) {
  107.         pushmatrix();
  108.             /*
  109.              * find the spot on the edge of the sphere
  110.              * by making it (0, 0, 0) in world coordinates
  111.              */
  112.             rotate(i, 'y');
  113.             translate(0.0, 0.0, RADIUS);
  114.  
  115.             move(0.0, 0.0, 0.0);
  116.  
  117.             drawchar(*str++);
  118.         popmatrix();
  119.     }
  120. }
  121.  
  122. /*
  123.  * makesphere
  124.  *
  125.  *    create the sphere object
  126.  */
  127. makesphere()
  128. {
  129.     float    i, r, z, a;
  130.  
  131.     makeobj(SPHERE);
  132.  
  133.         for (i = 0; i < 180; i += 20) {
  134.             pushmatrix();
  135.                 rotate(i, 'y');
  136.                 circle(0.0, 0.0, RADIUS);
  137.             popmatrix();
  138.         }
  139.         
  140.         pushmatrix();
  141.             rotate(90.0, 'x');
  142.             for (a = -90.0; a < 90.0; a += 20.0) {
  143.                 r = RADIUS * cos((double)a * PI / 180.0);
  144.                 z = RADIUS * sin((double)a * PI / 180.0);
  145.                 pushmatrix();
  146.                     translate(0.0, 0.0, -z);
  147.                     circle(0.0, 0.0, r);
  148.                 popmatrix();    
  149.             }
  150.         popmatrix();
  151.  
  152.     closeobj();
  153. }
  154.