home *** CD-ROM | disk | FTP | other *** search
/ gondwana.ecr.mu.oz.au/pub/ / Graphics.tar / Graphics / VOGLE.ZIP / VOGLE / EXAMPLES / PVIEWS.P < prev    next >
Text File  |  2000-02-11  |  3KB  |  159 lines

  1. program views;
  2. (*
  3.  *    Shows various combinations of viewing and
  4.  *    projection transformations.
  5.  *)
  6.  
  7. #include "Vogle.h"
  8.  
  9. var
  10.     device: string_t;
  11.     i: integer;
  12.  
  13.     procedure DrawTetra;
  14.     (*
  15.      *    generate a tetraedron as a series of move draws
  16.      *)
  17.     begin
  18.         Move(-0.5,  0.866, -0.5);
  19.         Draw(-0.5, -0.866, -0.5);
  20.         Draw( 1.0,  0.0,   -0.5);
  21.         Draw(-0.5,  0.866, -0.5);
  22.         Draw( 0.0,  0.0,    1.5);
  23.         Draw(-0.5, -0.866, -0.5);
  24.         Move( 1.0,  0.0,   -0.5);
  25.         Draw( 0.0,  0.0,    1.5);
  26.         
  27.         (* 
  28.          * Label the vertices.
  29.          *)
  30.         Color(WHITE);
  31.         TextSize(0.3, 0.5);        (* set the text size *)
  32.         Move(-0.5,  0.866, -0.5);
  33.         DrawChar('a');
  34.         Move(-0.5, -0.866, -0.5);
  35.         DrawChar('b');
  36.         Move( 1.0,  0.0,   -0.5);
  37.         DrawChar('c');
  38.         Move( 0.0,  0.0,    1.5);
  39.         DrawChar('d')
  40.     end;
  41.  
  42. begin
  43.     write('Enter device name: ');
  44.     readln(device);
  45.     Vinit(device);
  46.  
  47.     Color(BLACK);
  48.     Clear;
  49.  
  50.     (*
  51.      * we want to draw just within the boundaries of the screen
  52.      *)
  53.     ViewPort(-0.9, 0.9, -0.9, 0.9);
  54.  
  55.  
  56.     Ortho2(-5.0, 5.0, -5.0, 5.0);    (* set the world size *)
  57.  
  58.     Color(RED);
  59.     Rect(-5.0, -5.0, 5.0, 5.0);    (* draw a boundary frame *)
  60.  
  61.     (*
  62.      * set up a perspective projection with a field of view of
  63.      * 40.0 degrees, aspect ratio of 1.0, near clipping plane 0.1,
  64.      * and the far clipping plane at 1000.0.
  65.      *)
  66.     Perspective(40.0, 1.0, 0.1, 1000.0);
  67.  
  68.     (*
  69.      * we want the drawing to be done with our eye point at (5.0, 8.0, 5.0)
  70.      * looking towards (0.0, 0.0, 0.0). The last parameter gives a twist
  71.      * in degrees around the line of sight, in this case zero.
  72.      *)
  73.     LookAt(5.0, 8.0, 5.0, 0.0, 0.0, 0.0, 0.0);
  74.  
  75.     DrawTetra;
  76.  
  77.     Move2(-4.5, -4.5);
  78.     TextSize(0.6, 0.9);        (* set the text size *)
  79.     DrawStr('perspective/lookat');
  80.  
  81.     i := GetKey;
  82.  
  83.     (*
  84.      * window can also be used to give a perspective projection. Its
  85.      * arguments are 6 clipping planes, left, right, bottom, top, near,
  86.      * and far.
  87.      *)
  88.     Window(-5.0, 5.0, -5.0, 5.0, -5.0, 5.0);
  89.     (*
  90.      * as window replaces the current transformation matrix we must
  91.      * specify our viewpoint again.
  92.      *)
  93.     LookAt(5.0, 8.0, 5.0, 0.0, 0.0, 0.0, 0.0);
  94.  
  95.     Color(BLACK);
  96.     Clear;
  97.  
  98.     Color(GREEN);
  99.     Rect(-5.0, -5.0, 5.0, 5.0);
  100.  
  101.     DrawTetra;
  102.  
  103.     Move2(-4.5,-4.5);
  104.     TextSize(0.6, 0.9);        (* set the text size *)
  105.     DrawStr('window/lookat');
  106.  
  107.     i := GetKey;
  108.  
  109.     (*
  110.      * set up our original perspective projection again.
  111.      *)
  112.     Perspective(40.0, 1.0, 0.1, 1000.0);
  113.     (*
  114.      * polarview also specifies our viewpoint, but, unlike lookat, in polar
  115.      * coordinates. Its arguments are the distance from the world origin, an
  116.      * azimuthal angle in the x-y plane measured from the y axis, an 
  117.      * incidence angle in the y-z plane measured from the z axis, and a
  118.      * twist around the line of sight.
  119.      *)
  120.     PolarView(15.0, 30.0, 30.0, 30.0);
  121.  
  122.     Color(BLACK);
  123.     Clear;
  124.  
  125.     Color(MAGENTA);
  126.     Rect(-5.0, -5.0, 5.0, 5.0);
  127.  
  128.     DrawTetra;
  129.  
  130.     Move2(-4.5,-4.5);
  131.     TextSize(0.6, 0.9);        (* set the text size *)
  132.     DrawStr('perspective/polarview');
  133.  
  134.     i := GetKey;
  135.  
  136.     (*
  137.      * once more with window for comparison
  138.      *)
  139.     Window(-4.0, 4.0, -4.0, 4.0, -4.0, 4.0);
  140.     PolarView(6.0, 20.0, -30.0, 70.0);
  141.  
  142.     Color(BLACK);
  143.     Clear;
  144.  
  145.     Color(YELLOW);
  146.     Rect(-5.0, -5.0, 5.0, 5.0);
  147.  
  148.     DrawTetra;
  149.  
  150.     Move2(-4.5,-4.5);
  151.     TextSize(0.6, 0.9);        (* set the text size *)
  152.     DrawStr('window/polarview');
  153.  
  154.     i := GetKey;
  155.  
  156.     Vexit;
  157. end.
  158.  
  159.