UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

39 lines (34 loc) 991 B
import {Vector3} from 'three'; import {NamedFunction7} from './_Base'; import {ImprovedNoise} from 'three/examples/jsm/math/ImprovedNoise'; const _v3 = new Vector3(); const noise = new ImprovedNoise(); function _fbm3d(x: number, y: number, z: number, octaves: number, ampMult: number, freqMult: number): number { let value = 0.0; let amplitude = 1.0; for (let i = 0; i < octaves; i++) { value += amplitude * noise.noise(x, y, z); x *= freqMult; y *= freqMult; z *= freqMult; amplitude *= ampMult; } return value; } export class noiseImprovedVector3 extends NamedFunction7<[Vector3, number, Vector3, Vector3, number, number, number]> { static override type() { return 'noiseImprovedVector3'; } func( position: Vector3, amp: number, freq: Vector3, offset: Vector3, octaves: number, ampMult: number, freqMult: number ): number { _v3.copy(position).add(offset).multiply(freq); return amp * _fbm3d(_v3.x, _v3.y, _v3.z, octaves, ampMult, freqMult); } }