summaryrefslogtreecommitdiffstats
path: root/src/Noise/RidgedNoise.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/Noise/RidgedNoise.h')
-rw-r--r--src/Noise/RidgedNoise.h91
1 files changed, 91 insertions, 0 deletions
diff --git a/src/Noise/RidgedNoise.h b/src/Noise/RidgedNoise.h
new file mode 100644
index 000000000..f59a0512f
--- /dev/null
+++ b/src/Noise/RidgedNoise.h
@@ -0,0 +1,91 @@
+
+// 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;
+} ;
+
+
+
+
+