ts-noise
Version:
Simple gradient noise library for use with Three.js. Now with fBm!
3 lines (2 loc) • 4.5 kB
JavaScript
Object.defineProperty(exports,"__esModule",{value:!0});var p=[151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208,89,18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180];class Vector2{constructor(t=0,e=0){this.x=t,this.y=e}set(t,e){this.x=t,this.y=e}add(t){this.x+=t.x,this.y+=t.y}sub(t){this.x-=t.x,this.y-=t.y}dot(t){return this.x*t.x+this.y*t.y}addVectors(t,e){var r=new Vector2;return r.x=t.x+e.x,r.y=t.y+e.y,r}subVectors(t,e){var r=new Vector2;return r.x=t.x-e.x,r.y=t.y-e.y,r}}class Vector3{constructor(t=0,e=0,r=0){this.x=t,this.y=e,this.z=r}set(t,e,r){this.x=t,this.y=e,this.z=r}add(t){this.x+=t.x,this.y+=t.y,this.z+=t.z}sub(t){this.x-=t.x,this.y-=t.y,this.z-=t.z}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}addVectors(t,e){var r=new Vector3;return r.x=t.x+e.x,r.y=t.y+e.y,r.z=t.z+e.z,r}subVectors(t,e){var r=new Vector3;return r.x=t.x-e.x,r.y=t.y-e.y,r.z=t.z-e.z,r}}class Perlin{constructor(t){var e=[new Vector3(1,1,0),new Vector3(-1,1,0),new Vector3(1,-1,0),new Vector3(-1,-1,0),new Vector3(1,0,1),new Vector3(-1,0,1),new Vector3(1,0,-1),new Vector3(-1,0,-1),new Vector3(0,1,1),new Vector3(0,-1,1),new Vector3(0,1,-1),new Vector3(0,-1,-1)],r=new Array(512),s=new Array(512);t=t||1,t*=65536,(t=Math.floor(t))<256&&(t|=t<<8);for(var i=0;i<256;i++){var o=1&i?p[i]^255&t:p[i]^t>>8&255;r[i]=r[i+256]=o,s[i]=s[i+256]=e[o%12]}this._seed=t,this._offsetMatrix=[new Vector3(0,0,0),new Vector3(0,0,1),new Vector3(0,1,0),new Vector3(0,1,1),new Vector3(1,0,0),new Vector3(1,0,1),new Vector3(1,1,0),new Vector3(1,1,1)],this._perm=r,this._gradP=s}_fade(t){return t*t*t*(t*(6*t-15)+10)}_lerp(t,e,r){return(1-r)*t+r*e}_gradient(t){var e=this._perm;return t instanceof Vector3?t.x+e[t.y+e[t.z]]:t.x+e[t.y]}get2(e){Array.isArray(e)&&(e=new Vector2(e[0],e[1]));var r=new Vector2(Math.floor(e.x),Math.floor(e.y)),s=(e.sub(r),r.x&=255,r.y&=255,[]);for(let t=0;t<4;t++){var i=this._offsetMatrix[2*t],i=new Vector2(i.x,i.y),o=this._gradP[this._gradient((new Vector2).addVectors(r,i))],o=new Vector2(o.x,o.y),i=(new Vector2).subVectors(e,i);s.push(o.dot(i))}var t=this._fade(e.x),n=this._fade(e.y);return this._lerp(this._lerp(s[0],s[2],t),this._lerp(s[1],s[3],t),n)}get3(e){if(void 0===(e=Array.isArray(e)?new Vector3(e[0],e[1],e[2]):e).z)throw"Input to Perlin::get3() must be of type THREE.Vector3";var r=new Vector3(Math.floor(e.x),Math.floor(e.y),Math.floor(e.z)),s=(e.sub(r),r.x&=255,r.y&=255,r.z&=255,[]);for(let t=0;t<8;t++){var i=this._offsetMatrix[t],o=this._gradP[this._gradient((new Vector3).addVectors(r,i))],i=(new Vector3).subVectors(e,i);s.push(o.dot(i))}var t=this._fade(e.x),n=this._fade(e.y),a=this._fade(e.z);return this._lerp(this._lerp(this._lerp(s[0],s[4],t),this._lerp(s[1],s[5],t),a),this._lerp(this._lerp(s[2],s[6],t),this._lerp(s[3],s[7],t),a),n)}}class FBM{constructor(t){var{seed:t,scale:e,persistance:r,lacunarity:s,octaves:i,redistribution:o}=t;this._noise=new Perlin(t),this._scale=e||1,this._persistance=r||.5,this._lacunarity=s||2,this._octaves=i||6,this._redistribution=o||1}get2(e){Array.isArray(e)&&(e=new Vector2(e[0],e[1]));let r=0,s=1,i=1,o=s;var n=this._noise.get2.bind(this._noise);for(let t=0;t<this._octaves;t++){var a=n(new Vector2(e.x*this._scale*i,e.y*this._scale*i));r+=a*s,i*=this._lacunarity,s*=this._persistance,o+=s}return Math.pow(r,this._redistribution)/o}get3(e){Array.isArray(e)&&(e=new Vector3(e[0],e[1],e[2]));let r=0,s=1,i=1,o=s;var n=this._noise.get3.bind(this._noise);for(let t=0;t<this._octaves;t++){var a=n(new Vector3(e.x*this._scale*i,e.y*this._scale*i,e.z*this._scale*i));r+=a*s,i*=this._lacunarity,s*=this._persistance,o+=s}return Math.pow(r,this._redistribution)/o}}exports.FBM=FBM,exports.Perlin=Perlin;
//# sourceMappingURL=index.cjs.map