Implement perlin noise with turbulance
This commit is contained in:
Binary file not shown.
BIN
build/Raytracer
BIN
build/Raytracer
Binary file not shown.
14
perlin.h
14
perlin.h
@@ -47,6 +47,20 @@ class perlin {
|
|||||||
return perlinInterpolation(c, u, v, w);
|
return perlinInterpolation(c, u, v, w);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double turbulance(const point3& p, int depth) const {
|
||||||
|
auto accum = 0.0;
|
||||||
|
auto temporaryP = p;
|
||||||
|
auto weight = 1.0;
|
||||||
|
|
||||||
|
for (int i = 0; i < depth; i++) {
|
||||||
|
accum += weight * noise(temporaryP);
|
||||||
|
weight *= 0.5;
|
||||||
|
temporaryP *= 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
return fabs(accum);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static const int pointCount = 256;
|
static const int pointCount = 256;
|
||||||
vec3* randVector;
|
vec3* randVector;
|
||||||
|
@@ -80,7 +80,7 @@ class noiseTexture : public texture {
|
|||||||
noiseTexture(double scale) : scale(scale) {}
|
noiseTexture(double scale) : scale(scale) {}
|
||||||
|
|
||||||
colour value(double u, double v, const point3& p) const override {
|
colour value(double u, double v, const point3& p) const override {
|
||||||
return colour(1, 1, 1) * 0.5 * (1.0 + noise.noise(scale * p));
|
return colour(1, 1, 1) * noise.turbulance(p, 7);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
Reference in New Issue
Block a user