2014-01-01 16:45:50 +00:00
|
|
|
#ifndef FRACTALNOISE_H
|
|
|
|
#define FRACTALNOISE_H
|
|
|
|
|
|
|
|
#include "basics_global.h"
|
|
|
|
|
|
|
|
#include "NoiseState.h"
|
|
|
|
|
|
|
|
namespace paysages {
|
|
|
|
namespace basics {
|
|
|
|
|
2016-01-03 18:21:23 +00:00
|
|
|
/**
|
|
|
|
* Fractal noise generator, based on a sum of simple noise functions.
|
2014-01-01 16:45:50 +00:00
|
|
|
*/
|
2015-11-09 21:30:46 +00:00
|
|
|
class BASICSSHARED_EXPORT FractalNoise {
|
|
|
|
public:
|
2014-01-01 16:45:50 +00:00
|
|
|
FractalNoise();
|
2014-01-21 20:51:11 +00:00
|
|
|
virtual ~FractalNoise();
|
2014-01-01 16:45:50 +00:00
|
|
|
|
2016-01-03 19:22:06 +00:00
|
|
|
virtual void save(PackStream *stream) const;
|
|
|
|
virtual void load(PackStream *stream);
|
|
|
|
virtual void copy(FractalNoise *destination) const;
|
|
|
|
|
2015-12-24 00:21:12 +00:00
|
|
|
inline double getScaling() const {
|
|
|
|
return scaling;
|
|
|
|
}
|
|
|
|
inline double getHeight() const {
|
|
|
|
return height;
|
|
|
|
}
|
|
|
|
inline double getStepScaling() const {
|
|
|
|
return step_scaling;
|
|
|
|
}
|
|
|
|
inline double getStepHeight() const {
|
|
|
|
return step_height;
|
|
|
|
}
|
|
|
|
|
2015-11-09 21:30:46 +00:00
|
|
|
void setScaling(double scaling, double height = 1.0);
|
|
|
|
void setStep(double scaling_factor, double height_factor = 1.0);
|
2014-01-01 17:21:34 +00:00
|
|
|
void setState(const NoiseState &state);
|
2014-01-01 16:45:50 +00:00
|
|
|
|
|
|
|
double get1d(double detail, double x) const;
|
|
|
|
double get2d(double detail, double x, double y) const;
|
|
|
|
double get3d(double detail, double x, double y, double z) const;
|
|
|
|
|
|
|
|
virtual double getBase1d(double x) const;
|
|
|
|
virtual double getBase2d(double x, double y) const;
|
2016-01-03 18:21:23 +00:00
|
|
|
/**
|
|
|
|
* Base 3d noise function, returning (as much as possible) a value in the [0.5, 0.5] range.
|
|
|
|
*
|
|
|
|
* Other dimension noise (1d and 2d) can be provided, or this one will be used to simulate them.
|
|
|
|
*/
|
2014-01-01 16:45:50 +00:00
|
|
|
virtual double getBase3d(double x, double y, double z) const = 0;
|
|
|
|
|
2015-11-09 21:30:46 +00:00
|
|
|
private:
|
2014-01-01 16:45:50 +00:00
|
|
|
NoiseState state;
|
|
|
|
|
|
|
|
double scaling;
|
|
|
|
double height;
|
|
|
|
double step_scaling;
|
|
|
|
double step_height;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif // FRACTALNOISE_H
|