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

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