123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- import {simplex} from './simplex-noise.js';
- export const noise = (function() {
- class _NoiseGenerator {
- constructor(params) {
- this._params = params;
- this._Init();
- }
- _Init() {
- this._noise = new simplex.SimplexNoise(this._params.seed);
- }
- Get(x, y, z) {
- const G = 2.0 ** (-this._params.persistence);
- const xs = x / this._params.scale;
- const ys = y / this._params.scale;
- const zs = z / this._params.scale;
- const noiseFunc = this._noise;
- let amplitude = 1.0;
- let frequency = 1.0;
- let normalization = 0;
- let total = 0;
- for (let o = 0; o < this._params.octaves; o++) {
- const noiseValue = noiseFunc.noise3D(
- xs * frequency, ys * frequency, zs * frequency) * 0.5 + 0.5;
- total += noiseValue * amplitude;
- normalization += amplitude;
- amplitude *= G;
- frequency *= this._params.lacunarity;
- }
- total /= normalization;
- return Math.pow(
- total, this._params.exponentiation) * this._params.height;
- }
- }
- return {
- Noise: _NoiseGenerator
- }
- })();
|