libnoise logo

A portable, open-source, coherent noise-generating library for C++


ridgedmulti.h

00001 // ridgedmulti.h
00002 //
00003 // Copyright (C) 2003, 2004 Jason Bevins
00004 //
00005 // This library is free software; you can redistribute it and/or modify it
00006 // under the terms of the GNU Lesser General Public License as published by
00007 // the Free Software Foundation; either version 2.1 of the License, or (at
00008 // your option) any later version.
00009 //
00010 // This library is distributed in the hope that it will be useful, but WITHOUT
00011 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00012 // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
00013 // License (COPYING.txt) for more details.
00014 //
00015 // You should have received a copy of the GNU Lesser General Public License
00016 // along with this library; if not, write to the Free Software Foundation,
00017 // Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00018 //
00019 // The developer's email is jlbezigvins@gmzigail.com (for great email, take
00020 // off every 'zig'.)
00021 //
00022 
00023 #ifndef NOISE_MODULE_RIDGEDMULTI_H
00024 #define NOISE_MODULE_RIDGEDMULTI_H
00025 
00026 #include "modulebase.h"
00027 
00028 namespace noise
00029 {
00030 
00031   namespace module
00032   {
00033 
00036 
00039 
00042 
00044     const double DEFAULT_RIDGED_FREQUENCY = 1.0;
00045 
00047     const double DEFAULT_RIDGED_LACUNARITY = 2.0;
00048 
00051     const int DEFAULT_RIDGED_OCTAVE_COUNT = 6;
00052 
00055     const noise::NoiseQuality DEFAULT_RIDGED_QUALITY = QUALITY_STD;
00056 
00058     const int DEFAULT_RIDGED_SEED = 0;
00059 
00062     const int RIDGED_MAX_OCTAVE = 30;
00063 
00128     class RidgedMulti: public Module
00129     {
00130 
00131       public:
00132 
00146         RidgedMulti ();
00147 
00151         double GetFrequency () const
00152         {
00153           return m_frequency;
00154         }
00155 
00162         double GetLacunarity () const
00163         {
00164           return m_lacunarity;
00165         }
00166 
00173         noise::NoiseQuality GetNoiseQuality () const
00174         {
00175           return m_noiseQuality;
00176         }
00177 
00186         int GetOctaveCount () const
00187         {
00188           return m_octaveCount;
00189         }
00190 
00195         int GetSeed () const
00196         {
00197           return m_seed;
00198         }
00199 
00200         virtual int GetSourceModuleCount () const
00201         {
00202           return 0;
00203         }
00204 
00205         virtual double GetValue (double x, double y, double z) const;
00206 
00210         void SetFrequency (double frequency)
00211         {
00212           m_frequency = frequency;
00213         }
00214 
00224         void SetLacunarity (double lacunarity)
00225         {
00226           m_lacunarity = lacunarity;
00227           CalcSpectralWeights ();
00228         }
00229 
00236         void SetNoiseQuality (noise::NoiseQuality noiseQuality)
00237         {
00238           m_noiseQuality = noiseQuality;
00239         }
00240 
00258         void SetOctaveCount (int octaveCount)
00259         {
00260           if (octaveCount > RIDGED_MAX_OCTAVE) {
00261             throw noise::ExceptionInvalidParam ();
00262           }
00263           m_octaveCount = octaveCount;
00264         }
00265 
00270         void SetSeed (int seed)
00271         {
00272           m_seed = seed;
00273         }
00274 
00275       protected:
00276 
00280         void CalcSpectralWeights ();
00281 
00283         double m_frequency;
00284 
00286         double m_lacunarity;
00287 
00289         noise::NoiseQuality m_noiseQuality;
00290 
00293         int m_octaveCount;
00294 
00296         double m_pSpectralWeights[RIDGED_MAX_OCTAVE];
00297 
00299         int m_seed;
00300 
00301     };
00302 
00304 
00306 
00308 
00309   }
00310 
00311 }
00312 
00313 #endif