Implement perlin noise
This commit is contained in:
@@ -11,6 +11,7 @@ add_executable(Raytracer
|
|||||||
hittableList.h
|
hittableList.h
|
||||||
interval.h
|
interval.h
|
||||||
material.h
|
material.h
|
||||||
|
perlin.h
|
||||||
ray.h
|
ray.h
|
||||||
rayTracer.h
|
rayTracer.h
|
||||||
rtw_stb_image.h
|
rtw_stb_image.h
|
||||||
|
@@ -39,7 +39,7 @@
|
|||||||
{
|
{
|
||||||
"directoryIndex" : 0,
|
"directoryIndex" : 0,
|
||||||
"id" : "Raytracer::@6890427a1f51a3e7e1df",
|
"id" : "Raytracer::@6890427a1f51a3e7e1df",
|
||||||
"jsonFile" : "target-Raytracer-Debug-28c14a284b376e6f3c5e.json",
|
"jsonFile" : "target-Raytracer-Debug-f0c538276ccb345994b1.json",
|
||||||
"name" : "Raytracer",
|
"name" : "Raytracer",
|
||||||
"projectIndex" : 0
|
"projectIndex" : 0
|
||||||
}
|
}
|
@@ -26,7 +26,7 @@
|
|||||||
"objects" :
|
"objects" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"jsonFile" : "codemodel-v2-d4a7d48a6b29f61122a4.json",
|
"jsonFile" : "codemodel-v2-3e9cc36c8bdbe2ee1863.json",
|
||||||
"kind" : "codemodel",
|
"kind" : "codemodel",
|
||||||
"version" :
|
"version" :
|
||||||
{
|
{
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"jsonFile" : "codemodel-v2-d4a7d48a6b29f61122a4.json",
|
"jsonFile" : "codemodel-v2-3e9cc36c8bdbe2ee1863.json",
|
||||||
"kind" : "codemodel",
|
"kind" : "codemodel",
|
||||||
"version" :
|
"version" :
|
||||||
{
|
{
|
@@ -94,7 +94,8 @@
|
|||||||
11,
|
11,
|
||||||
12,
|
12,
|
||||||
13,
|
13,
|
||||||
14
|
14,
|
||||||
|
15
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -146,6 +147,11 @@
|
|||||||
"path" : "material.h",
|
"path" : "material.h",
|
||||||
"sourceGroupIndex" : 1
|
"sourceGroupIndex" : 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"backtrace" : 1,
|
||||||
|
"path" : "perlin.h",
|
||||||
|
"sourceGroupIndex" : 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"backtrace" : 1,
|
"backtrace" : 1,
|
||||||
"path" : "ray.h",
|
"path" : "ray.h",
|
@@ -12,6 +12,7 @@ CMakeFiles/Raytracer.dir/main.cpp.o
|
|||||||
/home/cjsatnarine/Code/Raytracer/hittableList.h
|
/home/cjsatnarine/Code/Raytracer/hittableList.h
|
||||||
/home/cjsatnarine/Code/Raytracer/interval.h
|
/home/cjsatnarine/Code/Raytracer/interval.h
|
||||||
/home/cjsatnarine/Code/Raytracer/material.h
|
/home/cjsatnarine/Code/Raytracer/material.h
|
||||||
|
/home/cjsatnarine/Code/Raytracer/perlin.h
|
||||||
/home/cjsatnarine/Code/Raytracer/ray.h
|
/home/cjsatnarine/Code/Raytracer/ray.h
|
||||||
/home/cjsatnarine/Code/Raytracer/rayTracer.h
|
/home/cjsatnarine/Code/Raytracer/rayTracer.h
|
||||||
/home/cjsatnarine/Code/Raytracer/rtw_stb_image.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/hittableList.h \
|
||||||
/home/cjsatnarine/Code/Raytracer/interval.h \
|
/home/cjsatnarine/Code/Raytracer/interval.h \
|
||||||
/home/cjsatnarine/Code/Raytracer/material.h \
|
/home/cjsatnarine/Code/Raytracer/material.h \
|
||||||
|
/home/cjsatnarine/Code/Raytracer/perlin.h \
|
||||||
/home/cjsatnarine/Code/Raytracer/ray.h \
|
/home/cjsatnarine/Code/Raytracer/ray.h \
|
||||||
/home/cjsatnarine/Code/Raytracer/rayTracer.h \
|
/home/cjsatnarine/Code/Raytracer/rayTracer.h \
|
||||||
/home/cjsatnarine/Code/Raytracer/rtw_stb_image.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/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/math.h:
|
||||||
|
|
||||||
/usr/include/c++/13/bits/ostream_insert.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:
|
/usr/include/c++/13/cwctype:
|
||||||
|
|
||||||
/home/cjsatnarine/Code/Raytracer/camera.h:
|
|
||||||
|
|
||||||
/usr/include/x86_64-linux-gnu/bits/long-double.h:
|
/usr/include/x86_64-linux-gnu/bits/long-double.h:
|
||||||
|
|
||||||
/usr/include/c++/13/bits/algorithmfwd.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:
|
/usr/include/c++/13/ios:
|
||||||
|
|
||||||
|
/home/cjsatnarine/Code/Raytracer/camera.h:
|
||||||
|
|
||||||
/usr/include/c++/13/bits/stl_raw_storage_iter.h:
|
/usr/include/c++/13/bits/stl_raw_storage_iter.h:
|
||||||
|
|
||||||
/usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.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/c++/13/algorithm:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/select.h:
|
||||||
|
|
||||||
|
/usr/include/c++/13/cwchar:
|
||||||
|
|
||||||
/home/cjsatnarine/Code/Raytracer/interval.h:
|
/home/cjsatnarine/Code/Raytracer/interval.h:
|
||||||
|
|
||||||
/usr/include/c++/13/bits/hash_bytes.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:
|
/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/c++/13/bits/align.h:
|
||||||
|
|
||||||
/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.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/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/c++/13/bits/atomic_lockfree_defines.h:
|
||||||
|
|
||||||
/usr/include/x86_64-linux-gnu/asm/errno.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/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/alloca.h:
|
||||||
|
|
||||||
/usr/include/c++/13/bits/cpp_type_traits.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/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/uniform_int_dist.h:
|
||||||
|
|
||||||
/usr/include/c++/13/bits/locale_classes.tcc:
|
/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/sched.h:
|
||||||
|
|
||||||
/usr/include/endian.h:
|
|
||||||
|
|
||||||
/usr/include/stdint.h:
|
|
||||||
|
|
||||||
/usr/include/c++/13/bits/stl_iterator_base_types.h:
|
/usr/include/c++/13/bits/stl_iterator_base_types.h:
|
||||||
|
|
||||||
/usr/include/stdio.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/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:
|
/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/select.h:
|
||||||
|
|
||||||
/usr/include/x86_64-linux-gnu/bits/time.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/camera.h \
|
||||||
/home/cjsatnarine/Code/Raytracer/material.h \
|
/home/cjsatnarine/Code/Raytracer/material.h \
|
||||||
/home/cjsatnarine/Code/Raytracer/texture.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/rtw_stb_image.h \
|
||||||
/home/cjsatnarine/Code/Raytracer/external/stb_image.h \
|
/home/cjsatnarine/Code/Raytracer/external/stb_image.h \
|
||||||
/usr/include/c++/13/stdlib.h /usr/include/string.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));
|
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 main(void) {
|
||||||
int sceneToShow = 4;
|
int sceneToShow = 5;
|
||||||
|
|
||||||
switch (sceneToShow) {
|
switch (sceneToShow) {
|
||||||
case 1:
|
case 1:
|
||||||
@@ -159,5 +183,8 @@ int main(void) {
|
|||||||
case 4:
|
case 4:
|
||||||
funny();
|
funny();
|
||||||
break;
|
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
|
#ifndef TEXTURE_H
|
||||||
#define TEXTURE_H
|
#define TEXTURE_H
|
||||||
|
|
||||||
|
#include "perlin.h"
|
||||||
#include "rayTracer.h"
|
#include "rayTracer.h"
|
||||||
#include "rtw_stb_image.h"
|
#include "rtw_stb_image.h"
|
||||||
|
|
||||||
@@ -72,4 +73,16 @@ class imageTexture : public texture {
|
|||||||
rtwImage image;
|
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
|
#endif
|
Reference in New Issue
Block a user