Implement perlin noise
This commit is contained in:
@@ -11,6 +11,7 @@ add_executable(Raytracer
|
||||
hittableList.h
|
||||
interval.h
|
||||
material.h
|
||||
perlin.h
|
||||
ray.h
|
||||
rayTracer.h
|
||||
rtw_stb_image.h
|
||||
|
@@ -39,7 +39,7 @@
|
||||
{
|
||||
"directoryIndex" : 0,
|
||||
"id" : "Raytracer::@6890427a1f51a3e7e1df",
|
||||
"jsonFile" : "target-Raytracer-Debug-28c14a284b376e6f3c5e.json",
|
||||
"jsonFile" : "target-Raytracer-Debug-f0c538276ccb345994b1.json",
|
||||
"name" : "Raytracer",
|
||||
"projectIndex" : 0
|
||||
}
|
@@ -26,7 +26,7 @@
|
||||
"objects" :
|
||||
[
|
||||
{
|
||||
"jsonFile" : "codemodel-v2-d4a7d48a6b29f61122a4.json",
|
||||
"jsonFile" : "codemodel-v2-3e9cc36c8bdbe2ee1863.json",
|
||||
"kind" : "codemodel",
|
||||
"version" :
|
||||
{
|
||||
@@ -99,7 +99,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"jsonFile" : "codemodel-v2-d4a7d48a6b29f61122a4.json",
|
||||
"jsonFile" : "codemodel-v2-3e9cc36c8bdbe2ee1863.json",
|
||||
"kind" : "codemodel",
|
||||
"version" :
|
||||
{
|
@@ -94,7 +94,8 @@
|
||||
11,
|
||||
12,
|
||||
13,
|
||||
14
|
||||
14,
|
||||
15
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -146,6 +147,11 @@
|
||||
"path" : "material.h",
|
||||
"sourceGroupIndex" : 1
|
||||
},
|
||||
{
|
||||
"backtrace" : 1,
|
||||
"path" : "perlin.h",
|
||||
"sourceGroupIndex" : 1
|
||||
},
|
||||
{
|
||||
"backtrace" : 1,
|
||||
"path" : "ray.h",
|
@@ -12,6 +12,7 @@ CMakeFiles/Raytracer.dir/main.cpp.o
|
||||
/home/cjsatnarine/Code/Raytracer/hittableList.h
|
||||
/home/cjsatnarine/Code/Raytracer/interval.h
|
||||
/home/cjsatnarine/Code/Raytracer/material.h
|
||||
/home/cjsatnarine/Code/Raytracer/perlin.h
|
||||
/home/cjsatnarine/Code/Raytracer/ray.h
|
||||
/home/cjsatnarine/Code/Raytracer/rayTracer.h
|
||||
/home/cjsatnarine/Code/Raytracer/rtw_stb_image.h
|
||||
|
@@ -11,6 +11,7 @@ CMakeFiles/Raytracer.dir/main.cpp.o: /home/cjsatnarine/Code/Raytracer/main.cpp \
|
||||
/home/cjsatnarine/Code/Raytracer/hittableList.h \
|
||||
/home/cjsatnarine/Code/Raytracer/interval.h \
|
||||
/home/cjsatnarine/Code/Raytracer/material.h \
|
||||
/home/cjsatnarine/Code/Raytracer/perlin.h \
|
||||
/home/cjsatnarine/Code/Raytracer/ray.h \
|
||||
/home/cjsatnarine/Code/Raytracer/rayTracer.h \
|
||||
/home/cjsatnarine/Code/Raytracer/rtw_stb_image.h \
|
||||
@@ -273,12 +274,6 @@ CMakeFiles/Raytracer.dir/main.cpp.o: /home/cjsatnarine/Code/Raytracer/main.cpp \
|
||||
|
||||
/usr/include/x86_64-linux-gnu/sys/single_threaded.h:
|
||||
|
||||
/usr/include/c++/13/pstl/execution_defs.h:
|
||||
|
||||
/usr/include/c++/13/bits/basic_ios.tcc:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr.h:
|
||||
|
||||
/usr/include/c++/13/math.h:
|
||||
|
||||
/usr/include/c++/13/bits/ostream_insert.h:
|
||||
@@ -417,8 +412,6 @@ CMakeFiles/Raytracer.dir/main.cpp.o: /home/cjsatnarine/Code/Raytracer/main.cpp \
|
||||
|
||||
/usr/include/c++/13/cwctype:
|
||||
|
||||
/home/cjsatnarine/Code/Raytracer/camera.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/long-double.h:
|
||||
|
||||
/usr/include/c++/13/bits/algorithmfwd.h:
|
||||
@@ -427,6 +420,8 @@ CMakeFiles/Raytracer.dir/main.cpp.o: /home/cjsatnarine/Code/Raytracer/main.cpp \
|
||||
|
||||
/usr/include/c++/13/ios:
|
||||
|
||||
/home/cjsatnarine/Code/Raytracer/camera.h:
|
||||
|
||||
/usr/include/c++/13/bits/stl_raw_storage_iter.h:
|
||||
|
||||
/usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.h:
|
||||
@@ -439,6 +434,10 @@ CMakeFiles/Raytracer.dir/main.cpp.o: /home/cjsatnarine/Code/Raytracer/main.cpp \
|
||||
|
||||
/usr/include/c++/13/algorithm:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/sys/select.h:
|
||||
|
||||
/usr/include/c++/13/cwchar:
|
||||
|
||||
/home/cjsatnarine/Code/Raytracer/interval.h:
|
||||
|
||||
/usr/include/c++/13/bits/hash_bytes.h:
|
||||
@@ -475,6 +474,16 @@ CMakeFiles/Raytracer.dir/main.cpp.o: /home/cjsatnarine/Code/Raytracer/main.cpp \
|
||||
|
||||
/home/cjsatnarine/Code/Raytracer/colour.h:
|
||||
|
||||
/usr/include/c++/13/bits/streambuf.tcc:
|
||||
|
||||
/usr/include/c++/13/bits/specfun.h:
|
||||
|
||||
/usr/include/c++/13/bits/basic_string.h:
|
||||
|
||||
/usr/include/c++/13/tr1/poly_laguerre.tcc:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/endianness.h:
|
||||
|
||||
/usr/include/c++/13/bits/align.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h:
|
||||
@@ -501,6 +510,12 @@ CMakeFiles/Raytracer.dir/main.cpp.o: /home/cjsatnarine/Code/Raytracer/main.cpp \
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h:
|
||||
|
||||
/usr/include/c++/13/bits/basic_ios.tcc:
|
||||
|
||||
/usr/include/c++/13/pstl/execution_defs.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr.h:
|
||||
|
||||
/usr/include/c++/13/bits/atomic_lockfree_defines.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/asm/errno.h:
|
||||
@@ -527,16 +542,6 @@ CMakeFiles/Raytracer.dir/main.cpp.o: /home/cjsatnarine/Code/Raytracer/main.cpp \
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/time64.h:
|
||||
|
||||
/usr/include/c++/13/bits/streambuf.tcc:
|
||||
|
||||
/usr/include/c++/13/bits/specfun.h:
|
||||
|
||||
/usr/include/c++/13/bits/basic_string.h:
|
||||
|
||||
/usr/include/c++/13/tr1/poly_laguerre.tcc:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/endianness.h:
|
||||
|
||||
/usr/include/alloca.h:
|
||||
|
||||
/usr/include/c++/13/bits/cpp_type_traits.h:
|
||||
@@ -577,6 +582,10 @@ CMakeFiles/Raytracer.dir/main.cpp.o: /home/cjsatnarine/Code/Raytracer/main.cpp \
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/mathcalls.h:
|
||||
|
||||
/usr/include/endian.h:
|
||||
|
||||
/usr/include/stdint.h:
|
||||
|
||||
/usr/include/c++/13/bits/uniform_int_dist.h:
|
||||
|
||||
/usr/include/c++/13/bits/locale_classes.tcc:
|
||||
@@ -661,10 +670,6 @@ CMakeFiles/Raytracer.dir/main.cpp.o: /home/cjsatnarine/Code/Raytracer/main.cpp \
|
||||
|
||||
/usr/include/sched.h:
|
||||
|
||||
/usr/include/endian.h:
|
||||
|
||||
/usr/include/stdint.h:
|
||||
|
||||
/usr/include/c++/13/bits/stl_iterator_base_types.h:
|
||||
|
||||
/usr/include/stdio.h:
|
||||
@@ -711,12 +716,10 @@ CMakeFiles/Raytracer.dir/main.cpp.o: /home/cjsatnarine/Code/Raytracer/main.cpp \
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h:
|
||||
|
||||
/usr/include/c++/13/cwchar:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/sys/select.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/types/FILE.h:
|
||||
|
||||
/home/cjsatnarine/Code/Raytracer/perlin.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/select.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/time.h:
|
||||
|
Binary file not shown.
@@ -210,6 +210,7 @@ CMakeFiles/Raytracer.dir/main.cpp.o: \
|
||||
/home/cjsatnarine/Code/Raytracer/camera.h \
|
||||
/home/cjsatnarine/Code/Raytracer/material.h \
|
||||
/home/cjsatnarine/Code/Raytracer/texture.h \
|
||||
/home/cjsatnarine/Code/Raytracer/perlin.h \
|
||||
/home/cjsatnarine/Code/Raytracer/rtw_stb_image.h \
|
||||
/home/cjsatnarine/Code/Raytracer/external/stb_image.h \
|
||||
/usr/include/c++/13/stdlib.h /usr/include/string.h \
|
||||
|
BIN
build/Raytracer
BIN
build/Raytracer
Binary file not shown.
29
main.cpp
29
main.cpp
@@ -143,8 +143,32 @@ void funny() {
|
||||
cam.render(hittableList(object));
|
||||
}
|
||||
|
||||
void perlinSpheres() {
|
||||
hittableList world;
|
||||
|
||||
auto perlinTexture = make_shared<noiseTexture>();
|
||||
world.add(make_shared<sphere>(point3(0,-1000,0), 1000, make_shared<lambertian>(perlinTexture)));
|
||||
world.add(make_shared<sphere>(point3(0,2,0), 2, make_shared<lambertian>(perlinTexture)));
|
||||
|
||||
camera cam;
|
||||
|
||||
cam.aspectRatio = 16.0 / 9.0;
|
||||
cam.imageWidth = 800;
|
||||
cam.samplesPerPixel = 100;
|
||||
cam.maxDepth = 50;
|
||||
|
||||
cam.vFieldOfView = 20;
|
||||
cam.lookFrom = point3(13,2,3);
|
||||
cam.lookAt = point3(0,0,0);
|
||||
cam.vUp = vec3(0,1,0);
|
||||
|
||||
cam.defocusAngle = 0;
|
||||
|
||||
cam.render(world);
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
int sceneToShow = 4;
|
||||
int sceneToShow = 5;
|
||||
|
||||
switch (sceneToShow) {
|
||||
case 1:
|
||||
@@ -159,5 +183,8 @@ int main(void) {
|
||||
case 4:
|
||||
funny();
|
||||
break;
|
||||
case 5:
|
||||
perlinSpheres();
|
||||
break;
|
||||
}
|
||||
}
|
63
perlin.h
Normal file
63
perlin.h
Normal 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
|
13
texture.h
13
texture.h
@@ -1,6 +1,7 @@
|
||||
#ifndef TEXTURE_H
|
||||
#define TEXTURE_H
|
||||
|
||||
#include "perlin.h"
|
||||
#include "rayTracer.h"
|
||||
#include "rtw_stb_image.h"
|
||||
|
||||
@@ -72,4 +73,16 @@ class imageTexture : public texture {
|
||||
rtwImage image;
|
||||
};
|
||||
|
||||
class noiseTexture : public texture {
|
||||
public:
|
||||
noiseTexture() {}
|
||||
|
||||
colour value(double u, double v, const point3& p) const override {
|
||||
return colour(1,1,1) * noise.noise(p);
|
||||
}
|
||||
|
||||
private:
|
||||
perlin noise;
|
||||
};
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user