noise.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import {simplex} from './simplex-noise.js';
  2. export const noise = (function() {
  3. class _NoiseGenerator {
  4. constructor(params) {
  5. this._params = params;
  6. this._Init();
  7. }
  8. _Init() {
  9. this._noise = new simplex.SimplexNoise(this._params.seed);
  10. }
  11. Get(x, y, z) {
  12. const G = 2.0 ** (-this._params.persistence);
  13. const xs = x / this._params.scale;
  14. const ys = y / this._params.scale;
  15. const zs = z / this._params.scale;
  16. const noiseFunc = this._noise;
  17. let amplitude = 1.0;
  18. let frequency = 1.0;
  19. let normalization = 0;
  20. let total = 0;
  21. for (let o = 0; o < this._params.octaves; o++) {
  22. const noiseValue = noiseFunc.noise3D(
  23. xs * frequency, ys * frequency, zs * frequency) * 0.5 + 0.5;
  24. total += noiseValue * amplitude;
  25. normalization += amplitude;
  26. amplitude *= G;
  27. frequency *= this._params.lacunarity;
  28. }
  29. total /= normalization;
  30. return Math.pow(
  31. total, this._params.exponentiation) * this._params.height;
  32. }
  33. }
  34. return {
  35. Noise: _NoiseGenerator
  36. }
  37. })();