summaryrefslogblamecommitdiffstats
path: root/src/Noise/RidgedNoise.h
blob: 4402faa72470d91b6bc0ea0ac00bc0eeb0853015 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15














                                                                                                          
                                        
 
         
                                                             
                            





                                                              
                                  





                                                      
                                                             



                                                             






                                                                                               


                                                   
                                                                                                  

                                                    
                                                          





                                                             









                                                                                                                


                                                             
                                                                                                                             

                                                    
                                                          


                 
            
                  
  

// RidgedNoise.h

// Implements the cRidgedNoise template class that generates ridged noise based on another noise provider.





#pragma once





template <typename N> class cRidgedNoise
{
  public:
	/** Creates a new instance with the seed set to 0. */
	cRidgedNoise(void) :
		m_Noise(0)
	{
	}


	/** Creates a new instance with the specified seed. */
	cRidgedNoise(int a_Seed) :
		m_Noise(a_Seed)
	{
	}


	/** Sets the seed for the underlying noise. */
	void SetSeed(int a_Seed) { m_Noise.SetSeed(a_Seed); }


	/** Fills a 2D array with the values of the noise. */
	void Generate2D(
		NOISE_DATATYPE * a_Array,  ///< Array to generate into [x + a_SizeX * y]
		int a_SizeX,
		int a_SizeY,  ///< Count of the array, in each direction
		NOISE_DATATYPE a_StartX,
		NOISE_DATATYPE a_EndX,  ///< Noise-space coords of the array in the X direction
		NOISE_DATATYPE a_StartY,
		NOISE_DATATYPE a_EndY  ///< Noise-space coords of the array in the Y direction
	) const
	{
		int ArrayCount = a_SizeX * a_SizeY;
		m_Noise.Generate2D(a_Array, a_SizeX, a_SizeY, a_StartX, a_EndX, a_StartY, a_EndY);
		for (int i = 0; i < ArrayCount; i++)
		{
			a_Array[i] = std::abs(a_Array[i]);
		}
	}


	/** Fills a 3D array with the values of the noise. */
	void Generate3D(
		NOISE_DATATYPE * a_Array,  ///< Array to generate into [x + a_SizeX * y + a_SizeX * a_SizeY * z]
		int a_SizeX,
		int a_SizeY,
		int a_SizeZ,  ///< Count of the array, in each direction
		NOISE_DATATYPE a_StartX,
		NOISE_DATATYPE a_EndX,  ///< Noise-space coords of the array in the X direction
		NOISE_DATATYPE a_StartY,
		NOISE_DATATYPE a_EndY,  ///< Noise-space coords of the array in the Y direction
		NOISE_DATATYPE a_StartZ,
		NOISE_DATATYPE a_EndZ  ///< Noise-space coords of the array in the Z direction
	) const
	{
		int ArrayCount = a_SizeX * a_SizeY * a_SizeZ;
		m_Noise.Generate2D(a_Array, a_SizeX, a_SizeY, a_SizeZ, a_StartX, a_EndX, a_StartY, a_EndY, a_StartZ, a_EndZ);
		for (int i = 0; i < ArrayCount; i++)
		{
			a_Array[i] = std::abs(a_Array[i]);
		}
	}

  protected:
	N m_Noise;
};