hedgewars/uLandGenPerlin.pas
changeset 10182 9d34898b22f7
parent 10181 4708343d5963
child 10183 189afaf2d076
equal deleted inserted replaced
10181:4708343d5963 10182:9d34898b22f7
     4 interface
     4 interface
     5 
     5 
     6 procedure GenPerlin;
     6 procedure GenPerlin;
     7 
     7 
     8 implementation
     8 implementation
     9 uses uVariables, uConsts, math; // for min()
     9 uses uVariables, uConsts, uRandom, math; // for min()
    10 
    10 
    11 var fadear: array[byte] of LongInt;
    11 var fadear: array[byte] of LongInt;
    12     p: array[0..511] of LongInt;
    12     p: array[0..511] of LongInt;
    13 
    13 
    14 function fade(t: LongInt) : LongInt;
    14 function fade(t: LongInt) : LongInt;
    75 function f(t: double): double;
    75 function f(t: double): double;
    76 begin
    76 begin
    77     f:= t * t * t * (t * (t * 6 - 15) + 10);
    77     f:= t * t * t * (t * (t * 6 - 15) + 10);
    78 end;
    78 end;
    79 
    79 
    80 const permutation: array[byte] of LongInt = ( 151,160,137,91,90,15,
    80 procedure inoise_setup();
    81    131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,
    81 var i, ii, t: LongInt;
    82    190, 6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,
    82 begin
    83    88,237,149,56,87,174,20,125,136,171,168, 68,175,74,165,71,134,139,48,27,166,
    83     for i:= 0 to 254 do
    84    77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,
    84         p[i]:= i + 1;
    85    102,143,54, 65,25,63,161, 1,216,80,73,209,76,132,187,208, 89,18,169,200,196,
    85     p[255]:= 0;
    86    135,130,116,188,159,86,164,100,109,198,173,186, 3,64,52,217,226,250,124,123,
       
    87    5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,
       
    88    223,183,170,213,119,248,152, 2,44,154,163, 70,221,153,101,155,167, 43,172,9,
       
    89    129,22,39,253, 19,98,108,110,79,113,224,232,178,185, 112,104,218,246,97,228,
       
    90    251,34,242,193,238,210,144,12,191,179,162,241, 81,51,145,235,249,14,239,107,
       
    91    49,192,214, 31,181,199,106,157,184, 84,204,176,115,121,50,45,127, 4,150,254,
       
    92    138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180
       
    93    );
       
    94 
    86 
    95 procedure inoise_setup();
    87     for i:= 0 to 254 do
    96 var i: LongInt;
    88     begin
    97 begin
    89         ii:= GetRandom(256 - i) + i;
       
    90         t:= p[i];
       
    91         p[i]:= p[ii];
       
    92         p[ii]:= t
       
    93     end;
       
    94 
    98     for i:= 0 to 255 do
    95     for i:= 0 to 255 do
    99         begin
    96         p[256 + i]:= p[i];
   100         p[256 + i]:= permutation[i];
       
   101         p[i]:= permutation[i]
       
   102         end;
       
   103 
    97 
   104     for i:= 0 to 255 do
    98     for i:= 0 to 255 do
   105         fadear[i]:= trunc($1000 * f(i / 256));
    99         fadear[i]:= trunc($1000 * f(i / 256));
   106 end;
   100 end;
   107 
   101