home *** CD-ROM | disk | FTP | other *** search
/ Ray Tracing Box / RAY_CD.mdf / raytrace / hfg / waves.pas < prev   
Pascal/Delphi Source File  |  1994-01-11  |  3KB  |  101 lines

  1. { Programm waves.pas erzeugt ein TGA-File }
  2. { der Größe 640x 480 Pix. für den Einsatz }
  3. { in POV-Raytracing-Heightfields.         }
  4. { TURBO-PASCAL 6.0                        }
  5. { Autor: Dr. Rudolf Ehrler für mc         }
  6. { Name der zu erzeugenden Datei muß als   }
  7. { Parameterstring ohne Extension übergeben}
  8. { werden                                  }
  9.  
  10. PROGRAM waves;
  11.  
  12. USES DOS,CRT;
  13.  
  14. VAR
  15.   xmax,ymax    : WORD;   { Auflösung        }
  16.   xfreq,yfreq  : DOUBLE; { Frequenzen       }
  17.   xphase,yphase: DOUBLE; {Phasenverschiebung}
  18.   xamp,yamp    : DOUBLE; {Amplituden        }
  19.  
  20.  
  21.   x,y,z        : WORD;
  22.   zreal,dx,dy  : DOUBLE;
  23.  
  24.   filename     :STRING;
  25.   tgafile      :FILE OF BYTE;
  26.   i,k          :INTEGER;
  27.   bvar1,bvar2  : BYTE;
  28.  
  29. BEGIN
  30.   clrscr;
  31.   writeln('                        WAVES');
  32.   writeln('                        =====');
  33.   gotoxy(1,5);
  34.   writeln('Wellengenerator',
  35.           ' erzeugt TGA-File zum Einsatz',
  36.           ' in POV-Heightfields');
  37.   filename:=paramstr(1);
  38.   filename:=filename+'.tga';
  39.   assign(tgafile,filename);
  40.   (*$I-*) rewrite(tgafile); (*$I+*)
  41.   i:=ioresult;
  42.   IF i<>0 THEN BEGIN
  43.     writeln('TGA-Datei ',filename,
  44.         ' kann nicht geöffnet werden...');
  45.     writeln('Aufruf: waves dateiname');
  46.     delay(2000);
  47.     halt
  48.   END;
  49.   { 18 BYTE Header }
  50.   bvar1:=2;
  51.   bvar2:=0;
  52.   xmax:=640;
  53.   ymax:=480;
  54.   { hier kann experimentiert werden! }
  55.   xfreq:=3.5;
  56.   yfreq:=5.5;
  57.   xphase:=0.0;
  58.   yphase:=0.0;
  59.   xamp:=0.6;
  60.   yamp:=0.3;
  61.   { Header wird geschrieben }
  62.   x:=xmax-1;
  63.   dx:=2*pi/x;
  64.   y:=ymax-1;
  65.   dy:=2*pi/y;
  66.   write(tgafile,bvar2,bvar2,bvar1);
  67.   FOR i:=1 TO 9 DO write(tgafile,bvar2);
  68.   bvar1:=xmax MOD 256;
  69.   bvar2:=xmax DIV 256;
  70.   write(tgafile,bvar1,bvar2);
  71.   bvar1:=ymax MOD 256;
  72.   bvar2:=ymax DIV 256;
  73.   write(tgafile,bvar1,bvar2);
  74.   bvar1:=$18;bvar2:=$20;
  75.   write(tgafile,bvar1,bvar2);
  76.   x:=xmax-1;
  77.   dx:=2*pi/x;
  78.   y:=ymax-1;
  79.   dy:=2*pi/y;
  80.   writeln('TGA-Datei ',filename,
  81.           ' wird geschrieben');
  82.   gotoxy(1,10);
  83.   writeln('Zeilen: ',y:6);
  84.   FOR i:=0 TO y DO BEGIN
  85.     gotoxy(1,20);
  86.     writeln('Zeilen......',i:6);
  87.     FOR k:=0 TO x DO BEGIN
  88.       zreal:=xamp*(sin(xfreq*dx*k+xphase)
  89.             +yamp*sin(yfreq*dy*i+yphase));
  90.       z:=round(zreal*32767/
  91.               (xamp+yamp))+32767;
  92.       bvar2:=0;
  93.       write(tgafile,bvar2);
  94.       bvar1:=z DIV 256;
  95.       bvar2:=z MOD 256;
  96.       write(tgafile,bvar2,bvar1);
  97.     END;
  98.   END;
  99.   close(tgafile);
  100. END.
  101.   END;