summaryrefslogtreecommitdiff
path: root/src/noise.h
diff options
context:
space:
mode:
authorkwolekr <mirrorisim@gmail.com>2012-11-25 21:16:48 -0500
committerPerttu Ahola <celeron55@gmail.com>2013-01-21 21:41:33 +0200
commit11afcbff69c95915e5142bc4b55636ff6358ece9 (patch)
tree1e6a3242e83443b665d9b781c84abad4e662f83d /src/noise.h
parent736b386554a6b385a34f40c0411c6e466ebec30a (diff)
downloadminetest-11afcbff69c95915e5142bc4b55636ff6358ece9.tar.gz
minetest-11afcbff69c95915e5142bc4b55636ff6358ece9.tar.bz2
minetest-11afcbff69c95915e5142bc4b55636ff6358ece9.zip
The new mapgen, noise functions, et al.
Diffstat (limited to 'src/noise.h')
-rw-r--r--src/noise.h129
1 files changed, 54 insertions, 75 deletions
diff --git a/src/noise.h b/src/noise.h
index 670c2eddc..6e5120003 100644
--- a/src/noise.h
+++ b/src/noise.h
@@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define NOISE_HEADER
#include "debug.h"
+#include "irr_v3d.h"
class PseudoRandom
{
@@ -59,91 +60,69 @@ private:
int m_next;
};
-double easeCurve(double t);
-
-// Return value: -1 ... 1
-double noise2d(int x, int y, int seed);
-double noise3d(int x, int y, int z, int seed);
+struct NoiseParams {
+ float offset;
+ float scale;
+ v3f spread;
+ int seed;
+ int octaves;
+ float persist;
+};
-double noise2d_gradient(double x, double y, int seed);
-double noise3d_gradient(double x, double y, double z, int seed);
-double noise2d_perlin(double x, double y, int seed,
- int octaves, double persistence);
+class Noise {
+public:
+ NoiseParams *np;
+ int seed;
+ int sx;
+ int sy;
+ int sz;
+ float *noisebuf;
+ float *buf;
+ float *result;
+
+ Noise(NoiseParams *np, int seed, int sx, int sy);
+ Noise(NoiseParams *np, int seed, int sx, int sy, int sz);
+ ~Noise();
+
+ void gradientMap2D(
+ float x, float y,
+ float step_x, float step_y,
+ int seed);
+ void gradientMap3D(
+ float x, float y, float z,
+ float step_x, float step_y, float step_z,
+ int seed);
+ float *perlinMap2D(float x, float y);
+ float *perlinMap3D(float x, float y, float z);
+};
-double noise2d_perlin_abs(double x, double y, int seed,
- int octaves, double persistence);
+// Return value: -1 ... 1
+float noise2d(int x, int y, int seed);
+float noise3d(int x, int y, int z, int seed);
-double noise3d_perlin(double x, double y, double z, int seed,
- int octaves, double persistence);
+float noise2d_gradient(float x, float y, int seed);
+float noise3d_gradient(float x, float y, float z, int seed);
-double noise3d_perlin_abs(double x, double y, double z, int seed,
- int octaves, double persistence);
+float noise2d_perlin(float x, float y, int seed,
+ int octaves, float persistence);
-enum NoiseType
-{
- NOISE_CONSTANT_ONE,
- NOISE_PERLIN,
- NOISE_PERLIN_ABS,
- NOISE_PERLIN_CONTOUR,
- NOISE_PERLIN_CONTOUR_FLIP_YZ,
-};
+float noise2d_perlin_abs(float x, float y, int seed,
+ int octaves, float persistence);
-struct NoiseParams
-{
- NoiseType type;
- int seed;
- int octaves;
- double persistence;
- double pos_scale;
- double noise_scale; // Useful for contour noises
-
- NoiseParams(NoiseType type_=NOISE_PERLIN, int seed_=0,
- int octaves_=3, double persistence_=0.5,
- double pos_scale_=100.0, double noise_scale_=1.0):
- type(type_),
- seed(seed_),
- octaves(octaves_),
- persistence(persistence_),
- pos_scale(pos_scale_),
- noise_scale(noise_scale_)
- {
- }
-};
+float noise3d_perlin(float x, float y, float z, int seed,
+ int octaves, float persistence);
-double noise3d_param(const NoiseParams &param, double x, double y, double z);
+float noise3d_perlin_abs(float x, float y, float z, int seed,
+ int octaves, float persistence);
-class NoiseBuffer
-{
-public:
- NoiseBuffer();
- ~NoiseBuffer();
-
- void clear();
- void create(const NoiseParams &param,
- 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);
- void multiply(const NoiseParams &param);
- // Deprecated
- void create(int seed, int octaves, double persistence,
- bool abs,
- 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);
-
- void intSet(int x, int y, int z, double d);
- void intMultiply(int x, int y, int z, double d);
- double intGet(int x, int y, int z);
- double get(double x, double y, double z);
- //bool contains(double x, double y, double z);
+inline float easeCurve(float t) {
+ return t * t * t * (t * (6.f * t - 15.f) + 10.f);
+}
-private:
- double *m_data;
- double m_start_x, m_start_y, m_start_z;
- double m_samplelength_x, m_samplelength_y, m_samplelength_z;
- int m_size_x, m_size_y, m_size_z;
-};
+#define NoisePerlin2D(np, x, y, s) ((np)->offset + (np)->scale * \
+ noise2d_perlin((float)(x) * (np)->spread.X, (float)(y) * (np)->spread.Y, \
+ (s) + (np)->seed, (np)->octaves, (np)->persist))
#endif