home *** CD-ROM | disk | FTP | other *** search
/ Virtual Reality Homebrewer's Handbook / vr.iso / vroom / math.pas < prev    next >
Pascal/Delphi Source File  |  1996-03-19  |  3KB  |  103 lines

  1. program math;
  2. uses graph, vroom, crt, time, fixed, cyberman;
  3.  
  4. const xdiv=20;
  5.       ydiv=20;
  6.       xunit=1;
  7.       yunit=1;
  8.       mult=(3.14159/10);
  9.  
  10. function height(x, y, t : real) : real;
  11. begin
  12.      height:=Sin(x*mult)*Sin(y*mult)*sin(t*mult)*5;
  13. end;
  14.  
  15. var  point : array[0..xdiv,0..ydiv] of vertex;
  16.      square : array[1..xdiv,1..ydiv,1..2] of face;
  17.      surface : object3d;
  18.      x, y : integer;
  19.      ch : char;
  20.      ok, moving, mouse, cyber : boolean;
  21.  
  22.  
  23. procedure Update;
  24. var junk : boolean;
  25. begin
  26.      if moving then
  27.      begin
  28.           for x:=0 to xdiv do
  29.           for y:=0 to ydiv do
  30.           begin
  31.                point[x,y].world.z:=real_to_fixed(height(x*xunit,y*yunit,GetSecondsTime));
  32.           end;
  33.           surface.Build_Normals;
  34.           surface.redraw:=true;
  35.      end;
  36.      if cyber then junk:=cyberman_check else if mouse then junk:=mouse_check else junk:=false;
  37.      if (KeyBoard_Check or Moving or junk) then redraw_scene;
  38. end;
  39.  
  40. {$F+}
  41.  
  42. function My_KeyCheck(key : char) : boolean;
  43. begin
  44.      if key='m' then
  45.      begin
  46.           moving:=not(moving);
  47.           My_KeyCheck:=true;
  48.      end
  49.      else
  50.          My_KeyCheck:=false;
  51. end;
  52.  
  53. {$F-}
  54.  
  55. begin
  56.      mouse:=false;
  57.      cyber:=false;
  58.      if cyberman_available then cyber:=true
  59.      else if mouse_available then mouse:=true;
  60.      Init_System;
  61.  
  62.      Set_Ambient_Intensity(0.5);
  63.      Set_Light(0.75,0,-1,-0.75);
  64.  
  65.      Set_View(200,0,0,0,0,0);
  66.      Set_Window(-20,-15,20,15);
  67.      User_KeyCheck_Proc(My_KeyCheck);
  68.      moving:=false;
  69.  
  70.      surface.Init;
  71.      for x:=0 to xdiv do
  72.      for y:=0 to ydiv do
  73.      begin
  74.           point[x,y].next:=surface.first_vertex;
  75.           surface.first_vertex:=@point[x,y];
  76.           point[x,y].data(x*xunit,y*yunit,height(x*xunit,y*yunit,GetSecondsTime));
  77.      end;
  78.      for x:=1 to xdiv do
  79.      for y:=1 to ydiv do
  80.      begin
  81.           square[x,y,1].Init(surface,2,1);
  82.           square[x,y,1].Add_Vertex(@point[x-1,y-1]);
  83.           square[x,y,1].Add_Vertex(@point[x,y-1]);
  84.           square[x,y,1].Add_Vertex(@point[x,y]);
  85.           square[x,y,1].Add_Vertex(@point[x-1,y]);
  86.           square[x,y,2].Init(surface,2,1);
  87.           square[x,y,2].Add_Vertex(@point[x-1,y]);
  88.           square[x,y,2].Add_Vertex(@point[x,y]);
  89.           square[x,y,2].Add_Vertex(@point[x,y-1]);
  90.           square[x,y,2].Add_Vertex(@point[x-1,y-1]);
  91.      end;
  92.      surface.Build_Normals;
  93.      surface.Set_Reference_Point(5,5,height(x*xunit,y*yunit,GetSecondsTime));
  94.      surface.MoveTo(0,0,0);
  95.  
  96.      Redraw_Scene;
  97.  
  98.      repeat
  99.            Update;
  100.      until false;
  101.  
  102.      Stop_Graphics;
  103. end.