From 7538b4c6201675c566c98b21c8ecddb798a14943 Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Sat, 25 Jun 2011 04:25:14 +0300 Subject: New map generator added (and SQLite, messed up the commits at that time...) (import from temporary git repo) --- src/noise.cpp | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 102 insertions(+), 9 deletions(-) (limited to 'src/noise.cpp') diff --git a/src/noise.cpp b/src/noise.cpp index 6362f5b2c..b755a824a 100644 --- a/src/noise.cpp +++ b/src/noise.cpp @@ -222,6 +222,49 @@ double noise3d_perlin_abs(double x, double y, double z, int seed, return a; } +// -1->0, 0->1, 1->0 +double contour(double v) +{ + v = fabs(v); + if(v >= 1.0) + return 0.0; + return (1.0-v); +} + +double noise3d_param(const NoiseParams ¶m, double x, double y, double z) +{ + double s = param.pos_scale; + x /= s; + y /= s; + z /= s; + + if(param.type == NOISE_PERLIN) + { + return param.noise_scale*noise3d_perlin(x,y,z, param.seed, + param.octaves, + param.persistence); + } + else if(param.type == NOISE_PERLIN_ABS) + { + return param.noise_scale*noise3d_perlin_abs(x,y,z, param.seed, + param.octaves, + param.persistence); + } + else if(param.type == NOISE_PERLIN_CONTOUR) + { + return contour(param.noise_scale*noise3d_perlin(x,y,z, + param.seed, param.octaves, + param.persistence)); + } + else if(param.type == NOISE_PERLIN_CONTOUR_FLIP_YZ) + { + return contour(param.noise_scale*noise3d_perlin(x,z,y, + param.seed, param.octaves, + param.persistence)); + } + else assert(0); +} + /* NoiseBuffer */ @@ -246,8 +289,7 @@ void NoiseBuffer::clear() m_size_z = 0; } -void NoiseBuffer::create(int seed, int octaves, double persistence, - double pos_scale, +void NoiseBuffer::create(const NoiseParams ¶m, double first_x, double first_y, double first_z, double last_x, double last_y, double last_z, double samplelength_x, double samplelength_y, double samplelength_z) @@ -265,22 +307,54 @@ void NoiseBuffer::create(int seed, int octaves, double persistence, m_size_y = (last_y - m_start_y)/samplelength_y + 2; m_size_z = (last_z - m_start_z)/samplelength_z + 2; - /*dstream<<"m_size_x="<