92 lines
2.1 KiB
C++
92 lines
2.1 KiB
C++
|
|
// 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;
|
|
} ;
|
|
|
|
|
|
|
|
|
|
|