summary refs log tree commit diff
path: root/src/Math/Random.hpp
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2023-07-07 21:39:42 +0200
committerMel <einebeere@gmail.com>2023-07-07 21:39:42 +0200
commitf1fc192ddc4c739fa8b4b376c759b7d3218a34eb (patch)
tree9e9afb9a21ba3ca27d1f25d46230aa9d27f8be39 /src/Math/Random.hpp
parent24b8124469350d1c80d0553cf3f4bf58cdb1489b (diff)
downloadmeowcraft-f1fc192ddc4c739fa8b4b376c759b7d3218a34eb.tar.zst
meowcraft-f1fc192ddc4c739fa8b4b376c759b7d3218a34eb.zip
Chunk-bound tree decoration
Diffstat (limited to 'src/Math/Random.hpp')
-rw-r--r--src/Math/Random.hpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/Math/Random.hpp b/src/Math/Random.hpp
new file mode 100644
index 0000000..ab94871
--- /dev/null
+++ b/src/Math/Random.hpp
@@ -0,0 +1,31 @@
+#pragma once
+
+#include "array"
+#include "Common.hpp"
+
+namespace Math::Random {
+
+std::array<uint8_t, 4> break_float(float f);
+float to_float(uint8_t u);
+
+uint8_t hash(uint8_t x);
+
+float random();
+
+template <size_t D>
+struct Noise {
+    float at(Vector<D> pos) const {
+        uint8_t to_hash[D * 4];
+        for (int i = 0; i < D; i++) {
+            auto b = break_float(pos[i]);
+            to_hash[i*4] = b[0]; to_hash[i*4+1] = b[1]; to_hash[i*4+2] = b[2]; to_hash[i*4+3] = b[3];
+        }
+        uint8_t h = 0;
+        for (int i = 0; i < D * 4; i++) {
+            h = hash(h) + to_hash[i];
+        }
+        return to_float(h);
+    }
+};
+
+}
\ No newline at end of file