summary refs log tree commit diff
path: root/src/Math/Perlin.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Math/Perlin.hpp')
-rw-r--r--src/Math/Perlin.hpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/Math/Perlin.hpp b/src/Math/Perlin.hpp
new file mode 100644
index 0000000..c31697b
--- /dev/null
+++ b/src/Math/Perlin.hpp
@@ -0,0 +1,38 @@
+#pragma once
+
+#include "Common.hpp"
+
+namespace Math::Perlin {
+
+float raw(Vector<2> pos);
+float raw(Vector<3> pos);
+
+template <size_t D>
+struct Noise {
+    static_assert(D > 1 && D < 4);
+
+    Vector<D> offset{20000.0f};
+    float scale = 15.0f;
+
+    uint octaves = 3;
+    float persistence = 0.3f;
+
+    float at(Vector<D> pos) const {
+        float result = 0;
+        float max = 0;
+        float frequency = 1;
+        float amplitude = 1;
+
+        for (uint octave = 0; octave < octaves; octave++) {
+            result += raw((pos + offset).abs() / scale * frequency) * amplitude;
+            max += amplitude;
+
+            frequency *= 2;
+            amplitude *= persistence;
+        }
+
+        return result / max;
+    }
+};
+
+}
\ No newline at end of file