From 2fd3d5202051e03303ac2b8e76976a7c4c8477f3 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sun, 7 Dec 2014 21:57:12 -0500 Subject: Add flags and lacunarity as new noise parameters Add 'absolute value' option to noise map functions Extend persistence modulation to 3D noise Extend 'eased' option to noise2d_perlin* functions Some noise.cpp formatting fixups --- src/noise.h | 63 ++++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 44 insertions(+), 19 deletions(-) (limited to 'src/noise.h') diff --git a/src/noise.h b/src/noise.h index 7d055d2e1..1f7bdbbf4 100644 --- a/src/noise.h +++ b/src/noise.h @@ -28,6 +28,9 @@ #include "debug.h" #include "irr_v3d.h" +#include "util/string.h" + +extern FlagDesc flagdesc_noiseparams[]; class PseudoRandom { @@ -66,6 +69,14 @@ private: int m_next; }; +#define NOISE_FLAG_DEFAULTS 0x01 +#define NOISE_FLAG_EASED 0x02 +#define NOISE_FLAG_ABSVALUE 0x04 + +//// TODO(hmmmm): implement these! +#define NOISE_FLAG_POINTBUFFER 0x08 +#define NOISE_FLAG_SIMPLEX 0x10 + struct NoiseParams { float offset; float scale; @@ -73,20 +84,32 @@ struct NoiseParams { s32 seed; u16 octaves; float persist; - bool eased; - - NoiseParams() {} + float lacunarity; + u32 flags; + + NoiseParams() { + offset = 0.0f; + scale = 1.0f; + spread = v3f(250, 250, 250); + seed = 12345; + octaves = 3; + persist = 0.6f; + lacunarity = 2.0f; + flags = NOISE_FLAG_DEFAULTS; + } - NoiseParams(float offset_, float scale_, v3f spread_, - int seed_, int octaves_, float persist_, bool eased_=false) + NoiseParams(float offset_, float scale_, v3f spread_, s32 seed_, + u16 octaves_, float persist_, float lacunarity_, + u32 flags_=NOISE_FLAG_DEFAULTS) { - offset = offset_; - scale = scale_; - spread = spread_; - seed = seed_; - octaves = octaves_; - persist = persist_; - eased = eased_; + offset = offset_; + scale = scale_; + spread = spread_; + seed = seed_; + octaves = octaves_; + persist = persist_; + lacunarity = lacunarity_; + flags = flags_; } }; @@ -123,10 +146,12 @@ public: void gradientMap3D( float x, float y, float z, float step_x, float step_y, float step_z, - int seed, bool eased=false); - float *perlinMap2D(float x, float y); - float *perlinMap2DModulated(float x, float y, float *persist_map); - float *perlinMap3D(float x, float y, float z, bool eased=false); + int seed); + + float *perlinMap2D(float x, float y, float *persistence_map=NULL); + float *perlinMap3D(float x, float y, float z, float *persistence_map=NULL); + + void updateResults(float g, float *gmap, float *persistence_map, size_t bufsize); void transformNoiseMap(); }; @@ -134,14 +159,14 @@ public: float noise2d(int x, int y, int seed); float noise3d(int x, int y, int z, int seed); -float noise2d_gradient(float x, float y, int seed); +float noise2d_gradient(float x, float y, int seed, bool eased=true); float noise3d_gradient(float x, float y, float z, int seed, bool eased=false); float noise2d_perlin(float x, float y, int seed, - int octaves, float persistence); + int octaves, float persistence, bool eased=true); float noise2d_perlin_abs(float x, float y, int seed, - int octaves, float persistence); + int octaves, float persistence, bool eased=true); float noise3d_perlin(float x, float y, float z, int seed, int octaves, float persistence, bool eased=false); -- cgit v1.2.3