home *** CD-ROM | disk | FTP | other *** search
/ gondwana.ecr.mu.oz.au/pub/ / Graphics.tar / Graphics / voglew.zip / CUBE.C < prev    next >
C/C++ Source or Header  |  1993-05-28  |  4KB  |  182 lines

  1.  
  2. #include <stdio.h>
  3. #include <vogle.h>
  4.  
  5. float carray[][3] = { -1.0,  -1.0,   1.0, /* front */
  6.               1.0,  -1.0,   1.0,
  7.               1.0,   1.0,   1.0,
  8.              -1.0,   1.0,   1.0,
  9.              -1.0,  -1.0,  -1.0, /* rear */
  10.               1.0,  -1.0,  -1.0,
  11.               1.0,   1.0,  -1.0,
  12.              -1.0,   1.0,  -1.0
  13.         };
  14.  
  15. int    nplanes;
  16.  
  17. /*
  18.  * drawcube
  19.  *
  20.  *    draw the cube setting colours if available
  21.  */
  22. void
  23. drawcube()
  24. {
  25.     if (nplanes > 1)
  26.         color(RED);
  27.  
  28.     makepoly();    /* Front */
  29.         move(carray[0][0], carray[0][1], carray[0][2]);
  30.         draw(carray[1][0], carray[1][1], carray[1][2]);
  31.         draw(carray[2][0], carray[2][1], carray[2][2]);
  32.         draw(carray[3][0], carray[3][1], carray[3][2]);
  33.         draw(carray[0][0], carray[0][1], carray[0][2]);
  34.     closepoly();
  35.     
  36.     if (nplanes > 1)
  37.         color(GREEN);
  38.  
  39.     makepoly();    /* Back */
  40.         move(carray[5][0], carray[5][1], carray[5][2]);
  41.         draw(carray[4][0], carray[4][1], carray[4][2]);
  42.         draw(carray[7][0], carray[7][1], carray[7][2]);
  43.         draw(carray[6][0], carray[6][1], carray[6][2]);
  44.         draw(carray[5][0], carray[5][1], carray[5][2]);
  45.     closepoly();
  46.  
  47.     if (nplanes > 1)
  48.         color(YELLOW);
  49.  
  50.     makepoly();    /* Right side */
  51.         move(carray[1][0], carray[1][1], carray[1][2]);
  52.         draw(carray[5][0], carray[5][1], carray[5][2]);
  53.         draw(carray[6][0], carray[6][1], carray[6][2]);
  54.         draw(carray[2][0], carray[2][1], carray[2][2]);
  55.         draw(carray[1][0], carray[1][1], carray[1][2]);
  56.     closepoly();
  57.  
  58.     if (nplanes > 1)
  59.         color(BLUE);
  60.  
  61.     makepoly();    /* Left side */
  62.         move(carray[0][0], carray[0][1], carray[0][2]);
  63.         draw(carray[3][0], carray[3][1], carray[3][2]);
  64.         draw(carray[7][0], carray[7][1], carray[7][2]);
  65.         draw(carray[4][0], carray[4][1], carray[4][2]);
  66.         draw(carray[0][0], carray[0][1], carray[0][2]);
  67.     closepoly();
  68.  
  69.     if (nplanes > 1)
  70.         color(MAGENTA);
  71.  
  72.     makepoly();    /* Top */
  73.         move(carray[2][0], carray[2][1], carray[2][2]);
  74.         draw(carray[6][0], carray[6][1], carray[6][2]);
  75.         draw(carray[7][0], carray[7][1], carray[7][2]);
  76.         draw(carray[3][0], carray[3][1], carray[3][2]);
  77.         draw(carray[2][0], carray[2][1], carray[2][2]);
  78.     closepoly();
  79.     
  80.     if (nplanes > 1)
  81.         color(CYAN);
  82.  
  83.     makepoly();    /* Bottom */
  84.         move(carray[0][0], carray[0][1], carray[0][2]);
  85.         draw(carray[4][0], carray[4][1], carray[4][2]);
  86.         draw(carray[5][0], carray[5][1], carray[5][2]);
  87.         draw(carray[1][0], carray[1][1], carray[1][2]);
  88.         draw(carray[0][0], carray[0][1], carray[0][2]);
  89.     closepoly();
  90. }
  91.  
  92.  
  93. main(argc, argv)
  94. {
  95.     char    c;
  96.     float    r, t, dr = 10.0, dt = 0.2;
  97.     int    fill, back, backdir, nkey;
  98.  
  99.     prefsize(300, 300);
  100.  
  101.     vinit("mswin");
  102.  
  103.     nplanes = getdepth();
  104.  
  105.     fill = 0;
  106.     back = 1;
  107.     backdir = 1;
  108.  
  109.     polyfill(fill);
  110.  
  111.     color(BLACK);
  112.     clear();
  113.  
  114.     window(-1.5, 1.5, -1.5, 1.5, 9.0, -5.0);
  115.     lookat(0.0, 0.0, 12.0, 0.0, 0.0, 0.0, 0.0);
  116.  
  117.     backface(back);
  118.     backfacedir(backdir);
  119.     
  120.     if (backbuffer() < 0) {
  121.         verror("cube: device doesn't support double buffering.\n");
  122.     }
  123.  
  124.     t = 0.0;
  125.     c = '\0';
  126.  
  127.     do {
  128.         for (r = 0.0; r < 360.0; r += dr) {
  129.             color(BLACK);
  130.             clear();
  131.             pushmatrix();
  132.                 translate(0.0, 0.0, t);
  133.                 rotate(r, 'y');
  134.                 rotate(r, 'z');
  135.                 rotate(r, 'x');
  136.                 color(WHITE);
  137.                 drawcube();
  138.                 if (nplanes == 1 && fill) {
  139.                     polyfill(0);
  140.                     color(0);
  141.                     drawcube();
  142.                     polyfill(fill);
  143.                 }
  144.  
  145.             popmatrix();
  146.  
  147.             if (c == 'p') {
  148.                 vnewdev("mswin");
  149.                 c = '\0';
  150.             }
  151.  
  152.             t += dt;
  153.             if (t > 3.0 || t < -18.0)
  154.                 dt = -dt;
  155.  
  156.             swapbuffers();
  157.  
  158.             if (c = checkkey()) {
  159.                 if (c == 'p') {
  160.                     voutput("cube.ps");
  161.                     vnewdev("postscript");
  162.                 } else if (c == 'f') {
  163.                     fill = !fill;
  164.                     polyfill(fill);
  165.                 } else if (c == 'b') {
  166.                     back = !back;
  167.                     backface(back);
  168.                 } else if (c == 'd') {
  169.                     backdir = !backdir;
  170.                     backfacedir(backdir);
  171.                 } else {
  172.                     vexit();
  173.                     exit(0);
  174.                 }
  175.             }
  176.         }
  177.     } while(1);
  178.  
  179.     vexit();
  180. }
  181.  
  182.