Advertisement
Guest User

Untitled

a guest
May 17th, 2017
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.97 KB | None | 0 0
  1.  
  2. perlinGenerator={}
  3.  
  4. perlinGenerator.permutation={};
  5. perlinGenerator.zoom=1
  6. perlinGenerator.oct=15
  7. perlinGenerator.res=.5
  8. function perlinGenerator:generateLookup(seed)
  9.     seed=seed or os.time();
  10.     math.randomseed(seed);
  11.     self.permutation={}
  12.     num=255;
  13.     for i=0,num do
  14.         self.permutation[i]=i
  15.     end
  16.    
  17.     for i=0,num-1 do
  18.         j=math.floor(math.random(0,num-i))
  19.        
  20.         zw=self.permutation[i]
  21.         self.permutation[i]=self.permutation[i+j]
  22.         self.permutation[i+j]=zw
  23.     end
  24. end
  25.  
  26. function fade(x)
  27.     return(x*x*x*(x*(x*6-15)+10))
  28. end
  29.  
  30. function wrapVal(x)
  31.     while x>255 do
  32.         x=x-255;
  33.     end
  34.     return x
  35. end
  36.  
  37. function grad(hash,x,y)
  38.     h=hash%4;
  39.     if(h==0)then return x+y
  40.     elseif(h==1)then return -x+y;
  41.     elseif(h==2)then return  x-y;
  42.     elseif(h==3)then return -x-y;
  43.     end
  44. end
  45.  
  46. function lerp(a,b,w)
  47.     return(a+(b-a)*w)
  48. end
  49.  
  50. function perlinGenerator:perlin(x,y)
  51.     x=x
  52.     y=y
  53.        
  54.     xf=x%1;
  55.     yf=y%1;
  56.  
  57.     xi=math.floor(x)%255;
  58.     yi=math.floor(y)%255;
  59.    
  60.     --u=xf
  61.     --v=yf
  62.     u=fade(xf)
  63.     v=fade(yf)
  64.    
  65.     aa=self.permutation[wrapVal(self.permutation[wrapVal(xi  )]+yi  )]
  66.     ab=self.permutation[wrapVal(self.permutation[wrapVal(xi+1)]+yi  )]
  67.     ba=self.permutation[wrapVal(self.permutation[wrapVal(xi  )]+yi+1)]
  68.     bb=self.permutation[wrapVal(self.permutation[wrapVal(xi+1)]+yi+1)]
  69.     --print(aa,ab,ba,bb)
  70.    
  71.     v1=grad(aa,xf  ,yf  );
  72.     v2=grad(ab,xf-1  ,yf);
  73.     v3=grad(ba,xf,yf-1  );
  74.     v4=grad(bb,xf-1,yf-1);
  75.     return(lerp(lerp(v1,v2,u),lerp(v3,v4,u),v))
  76.    
  77. end
  78.  
  79. function perlinGenerator:perlinOctave(x,y,octaves,persistence)
  80.     x=x/self.zoom
  81.     y=y/self.zoom
  82.     total=0
  83.     frequency=1
  84.     amplitude=1
  85.     maxVal=0
  86.     octaves=octaves or self.oct;
  87.     persistence=persistence or self.res;
  88.     for i=0,octaves do
  89.         total=total+self:perlin(x*frequency,y*frequency)*amplitude;
  90.         maxVal=maxVal+amplitude;
  91.         amplitude=amplitude*persistence
  92.         frequency=frequency*2
  93.     end
  94.     return(total/maxVal)
  95. end
  96.  
  97.  
  98. function perlinGenerator:new(o,dim)
  99.     o=o or {}
  100.     setmetatable(o,self)
  101.     self.zoom=1
  102.     self.__index=self
  103.     return o
  104. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement