fast-noise-lite-ts
Version:
A fast and lightweight noise generation library for JavaScript
39 lines (38 loc) • 1.64 kB
JavaScript
import { prime } from "../constants";
import { interpolateHermite, lerp, valueCoordinateR2, valueCoordinateR3 } from "../utilities";
export function valueR2(options, x, y) {
const seed = options.seed;
let x0 = Math.floor(x);
let y0 = Math.floor(y);
let xs = interpolateHermite(x - x0);
let ys = interpolateHermite(y - y0);
x0 = Math.imul(x0, prime.x);
y0 = Math.imul(y0, prime.y);
let x1 = x0 + prime.x;
let y1 = y0 + prime.y;
let xf0 = lerp(valueCoordinateR2(seed, x0, y0), valueCoordinateR2(seed, x1, y0), xs);
let xf1 = lerp(valueCoordinateR2(seed, x0, y1), valueCoordinateR2(seed, x1, y1), xs);
return lerp(xf0, xf1, ys);
}
export function valueR3(options, x, y, z) {
const seed = options.seed;
let x0 = Math.floor(x);
let y0 = Math.floor(y);
let z0 = Math.floor(z);
let xs = interpolateHermite(x - x0);
let ys = interpolateHermite(y - y0);
let zs = interpolateHermite(z - z0);
x0 = Math.imul(x0, prime.x);
y0 = Math.imul(y0, prime.y);
z0 = Math.imul(z0, prime.z);
let x1 = x0 + prime.x;
let y1 = y0 + prime.y;
let z1 = z0 + prime.z;
let xf00 = lerp(valueCoordinateR3(seed, x0, y0, z0), valueCoordinateR3(seed, x1, y0, z0), xs);
let xf10 = lerp(valueCoordinateR3(seed, x0, y1, z0), valueCoordinateR3(seed, x1, y1, z0), xs);
let xf01 = lerp(valueCoordinateR3(seed, x0, y0, z1), valueCoordinateR3(seed, x1, y0, z1), xs);
let xf11 = lerp(valueCoordinateR3(seed, x0, y1, z1), valueCoordinateR3(seed, x1, y1, z1), xs);
let yf0 = lerp(xf00, xf10, ys);
let yf1 = lerp(xf01, xf11, ys);
return lerp(yf0, yf1, zs);
}