Implement perlin noise

This commit is contained in:
CJSatnarine
2024-07-09 16:18:02 -04:00
parent 4c58e4a084
commit 0374a95639
13 changed files with 358872 additions and 358757 deletions

63
perlin.h Normal file
View File

@@ -0,0 +1,63 @@
#ifndef PERLIN_H
#define PERLIN_H
#include "rayTracer.h"
class perlin {
public:
perlin() {
randFloat = new double[pointCount];
for (int i = 0; i < pointCount; i++) {
randFloat[i] = randomDouble();
}
permX = perlinGeneratePerm();
permY = perlinGeneratePerm();
permZ = perlinGeneratePerm();
}
~perlin() {
delete[] randFloat;
delete[] permX;
delete[] permY;
delete[] permZ;
}
double noise(const point3& p) const {
auto i = int(4 * p.x()) & 255;
auto j = int(4 * p.y()) & 255;
auto k = int(4 * p.z()) & 255;
return randFloat[permX[i] ^ permY[j] ^ permZ[k]];
}
private:
static const int pointCount = 256;
double* randFloat;
int* permX;
int* permY;
int* permZ;
static int* perlinGeneratePerm(void) {
auto p = new int[pointCount];
for (int i = 0; i < pointCount; i++) {
p[i] = i;
}
permute(p, pointCount);
return p;
}
static void permute(int* p, int n) {
for (int i = n - 1; i > 0; i--) {
int target = randomInt(0, i);
int tmp = p[i];
p[i] = p[target];
p[target] = tmp;
}
}
};
#endif