00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef NOISE_MODULE_TURBULENCE_H
00024 #define NOISE_MODULE_TURBULENCE_H
00025
00026 #include "perlin.h"
00027
00028 namespace CS {
00029 namespace Math {
00030 namespace Noise {
00031 namespace Module {
00032
00035
00038
00041
00043 const double DEFAULT_TURBULENCE_FREQUENCY = DEFAULT_PERLIN_FREQUENCY;
00044
00046 const double DEFAULT_TURBULENCE_POWER = 1.0;
00047
00049 const int DEFAULT_TURBULENCE_ROUGHNESS = 3;
00050
00052 const int DEFAULT_TURBULENCE_SEED = DEFAULT_PERLIN_SEED;
00053
00112 class CS_CRYSTALSPACE_EXPORT Turbulence: public Module
00113 {
00114
00115 public:
00116
00130 Turbulence ();
00131
00138 double GetFrequency () const;
00139
00146 double GetPower () const
00147 {
00148 return m_power;
00149 }
00150
00159 int GetRoughnessCount () const
00160 {
00161 return m_xDistortModule.GetOctaveCount ();
00162 }
00163
00172 int GetSeed () const;
00173
00174 virtual int GetSourceModuleCount () const
00175 {
00176 return 1;
00177 }
00178
00179 virtual double GetValue (double x, double y, double z) const;
00180
00187 void SetFrequency (double frequency)
00188 {
00189
00190 m_xDistortModule.SetFrequency (frequency);
00191 m_yDistortModule.SetFrequency (frequency);
00192 m_zDistortModule.SetFrequency (frequency);
00193 }
00194
00201 void SetPower (double power)
00202 {
00203 m_power = power;
00204 }
00205
00220 void SetRoughness (int roughness)
00221 {
00222
00223 m_xDistortModule.SetOctaveCount (roughness);
00224 m_yDistortModule.SetOctaveCount (roughness);
00225 m_zDistortModule.SetOctaveCount (roughness);
00226 }
00227
00240 void SetSeed (int seed);
00241
00242 protected:
00243
00245 double m_power;
00246
00248 Perlin m_xDistortModule;
00249
00251 Perlin m_yDistortModule;
00252
00254 Perlin m_zDistortModule;
00255
00256 };
00257
00259
00261
00263
00264 }
00265 }
00266 }
00267 }
00268
00269 #endif