Implement BVH
This commit is contained in:
@@ -3,6 +3,8 @@ project(Raytracer VERSION 0.1.0 LANGUAGES C CXX)
|
||||
|
||||
add_executable(Raytracer
|
||||
ImageGenerator.cpp
|
||||
aabb.h
|
||||
bvh.h
|
||||
camera.h
|
||||
colour.h
|
||||
hittable.h
|
||||
|
@@ -1,4 +1,5 @@
|
||||
#include "rayTracer.h"
|
||||
#include "bvh.h"
|
||||
#include "camera.h"
|
||||
#include "hittable.h"
|
||||
#include "hittableList.h"
|
||||
@@ -9,18 +10,6 @@ int main(void) {
|
||||
// World.
|
||||
hittableList world;
|
||||
|
||||
// auto groundMaterial = make_shared<lambertian>(colour(0.1, 0.0, 0.0));
|
||||
// auto centreMaterial = make_shared<lambertian>(colour(0.1, 0.2, 0.5));
|
||||
// auto leftMaterial = make_shared<dielectric>(1.50);
|
||||
// auto bubbleMaterial = make_shared<dielectric>(1.00 / 1.50);
|
||||
// auto rightMaterial = make_shared<metal>(colour(1.0, 0.0, 0.0), 1.0);
|
||||
|
||||
// world.add(make_shared<sphere>(point3( 0.0, -100.5, -1.0), 100.0, groundMaterial));
|
||||
// world.add(make_shared<sphere>(point3( 0.0, 0.0, -1.2), 0.5, centreMaterial));
|
||||
// world.add(make_shared<sphere>(point3(-1.0, 0.0, -1.0), 0.5, leftMaterial));
|
||||
// world.add(make_shared<sphere>(point3(-1.0, 0.0, -1.0), 0.4, bubbleMaterial));
|
||||
// world.add(make_shared<sphere>(point3( 1.0, 0.0, -1.0), 0.5, rightMaterial));
|
||||
|
||||
// Code from the book.
|
||||
auto ground_material = make_shared<lambertian>(colour(0.5, 0.5, 0.5));
|
||||
world.add(make_shared<sphere>(point3(0,-1000,0), 1000, ground_material));
|
||||
@@ -65,6 +54,8 @@ int main(void) {
|
||||
auto material3 = make_shared<metal>(colour(0.7, 0.6, 0.5), 0.0);
|
||||
world.add(make_shared<sphere>(point3(4, 1, 0), 1.0, material3));
|
||||
|
||||
world = hittableList(make_shared<bvh_node>(world));
|
||||
|
||||
// Camera.
|
||||
camera cam;
|
||||
cam.aspectRatio = 16.0 / 9.0;
|
||||
|
58
aabb.h
Normal file
58
aabb.h
Normal file
@@ -0,0 +1,58 @@
|
||||
#ifndef AABB_H
|
||||
#define AABB_H
|
||||
|
||||
#include "rayTracer.h"
|
||||
|
||||
class aabb {
|
||||
public:
|
||||
interval x, y, z;
|
||||
|
||||
aabb() {} // The default AABB is empty, since intervals are empty by default.
|
||||
|
||||
aabb(const interval& x, const interval& y, const interval& z) : x(x), y(y), z(z) {}
|
||||
|
||||
aabb(const point3& a, const point3& b) {
|
||||
// Treat the two points a and b as extrema for the bounding box, so we don't require a particular minimum/maximum coordinate order.
|
||||
x = (a[0] <= b[0]) ? interval(a[0], b[0]) : interval(b[0], a[0]);
|
||||
y = (a[1] <= b[1]) ? interval(a[1], b[1]) : interval(b[1], a[1]);
|
||||
z = (a[2] <= b[2]) ? interval(a[2], b[2]) : interval(b[2], a[2]);
|
||||
}
|
||||
|
||||
aabb(const aabb& box0, const aabb& box1) {
|
||||
x = interval(box0.x, box1.x);
|
||||
y = interval(box0.y, box1.y);
|
||||
z = interval(box0.z, box1.z);
|
||||
}
|
||||
|
||||
const interval& axisInterval(int n) const {
|
||||
if (n == 1) return y;
|
||||
if (n == 2) return z;
|
||||
return x;
|
||||
}
|
||||
|
||||
bool hit(const ray& r, interval rayT) const {
|
||||
const point3& rayOrigin = r.origin();
|
||||
const vec3& rayDirection = r.direction();
|
||||
|
||||
for (int axis = 0; axis < 3; axis++) {
|
||||
const interval& ax = axisInterval(axis);
|
||||
const double adInv = 1.0 / rayDirection[axis];
|
||||
|
||||
auto t0 = (ax.min - rayOrigin[axis]) * adInv;
|
||||
auto t1 = (ax.max - rayOrigin[axis]) * adInv;
|
||||
|
||||
if (t0 < t1) {
|
||||
if (t0 > rayT.min) rayT.min = t0;
|
||||
if (t1 < rayT.max) rayT.max = t1;
|
||||
} else {
|
||||
if (t1 > rayT.min) rayT.min = t1;
|
||||
if (t0 < rayT.max) rayT.max = t0;
|
||||
}
|
||||
|
||||
if (rayT.max <= rayT.min) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
@@ -39,7 +39,7 @@
|
||||
{
|
||||
"directoryIndex" : 0,
|
||||
"id" : "Raytracer::@6890427a1f51a3e7e1df",
|
||||
"jsonFile" : "target-Raytracer-Debug-de18b889ec06b3c1ffd0.json",
|
||||
"jsonFile" : "target-Raytracer-Debug-53e51d7b7c539400eaa2.json",
|
||||
"name" : "Raytracer",
|
||||
"projectIndex" : 0
|
||||
}
|
@@ -26,7 +26,7 @@
|
||||
"objects" :
|
||||
[
|
||||
{
|
||||
"jsonFile" : "codemodel-v2-3325df503f174f7a816b.json",
|
||||
"jsonFile" : "codemodel-v2-f57fe542ed13663d4779.json",
|
||||
"kind" : "codemodel",
|
||||
"version" :
|
||||
{
|
||||
@@ -99,7 +99,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"jsonFile" : "codemodel-v2-3325df503f174f7a816b.json",
|
||||
"jsonFile" : "codemodel-v2-f57fe542ed13663d4779.json",
|
||||
"kind" : "codemodel",
|
||||
"version" :
|
||||
{
|
@@ -90,7 +90,9 @@
|
||||
7,
|
||||
8,
|
||||
9,
|
||||
10
|
||||
10,
|
||||
11,
|
||||
12
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -102,6 +104,16 @@
|
||||
"path" : "ImageGenerator.cpp",
|
||||
"sourceGroupIndex" : 0
|
||||
},
|
||||
{
|
||||
"backtrace" : 1,
|
||||
"path" : "aabb.h",
|
||||
"sourceGroupIndex" : 1
|
||||
},
|
||||
{
|
||||
"backtrace" : 1,
|
||||
"path" : "bvh.h",
|
||||
"sourceGroupIndex" : 1
|
||||
},
|
||||
{
|
||||
"backtrace" : 1,
|
||||
"path" : "camera.h",
|
Binary file not shown.
@@ -195,11 +195,18 @@ CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o: \
|
||||
/home/cjsatnarine/Code/Raytracer/interval.h \
|
||||
/home/cjsatnarine/Code/Raytracer/vec3.h \
|
||||
/home/cjsatnarine/Code/Raytracer/ray.h \
|
||||
/home/cjsatnarine/Code/Raytracer/camera.h \
|
||||
/home/cjsatnarine/Code/Raytracer/bvh.h \
|
||||
/home/cjsatnarine/Code/Raytracer/aabb.h /usr/include/c++/13/algorithm \
|
||||
/usr/include/c++/13/bits/stl_algo.h \
|
||||
/usr/include/c++/13/bits/algorithmfwd.h \
|
||||
/usr/include/c++/13/bits/stl_heap.h \
|
||||
/usr/include/c++/13/bits/uniform_int_dist.h \
|
||||
/usr/include/c++/13/pstl/glue_algorithm_defs.h \
|
||||
/home/cjsatnarine/Code/Raytracer/hittable.h \
|
||||
/home/cjsatnarine/Code/Raytracer/material.h \
|
||||
/home/cjsatnarine/Code/Raytracer/hittableList.h \
|
||||
/usr/include/c++/13/vector /usr/include/c++/13/bits/stl_vector.h \
|
||||
/usr/include/c++/13/bits/stl_bvector.h \
|
||||
/usr/include/c++/13/bits/vector.tcc \
|
||||
/home/cjsatnarine/Code/Raytracer/camera.h \
|
||||
/home/cjsatnarine/Code/Raytracer/material.h \
|
||||
/home/cjsatnarine/Code/Raytracer/sphere.h
|
||||
|
@@ -3,6 +3,8 @@
|
||||
|
||||
CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o
|
||||
/home/cjsatnarine/Code/Raytracer/ImageGenerator.cpp
|
||||
/home/cjsatnarine/Code/Raytracer/aabb.h
|
||||
/home/cjsatnarine/Code/Raytracer/bvh.h
|
||||
/home/cjsatnarine/Code/Raytracer/camera.h
|
||||
/home/cjsatnarine/Code/Raytracer/colour.h
|
||||
/home/cjsatnarine/Code/Raytracer/hittable.h
|
||||
@@ -16,9 +18,11 @@ CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o
|
||||
/usr/include/alloca.h
|
||||
/usr/include/asm-generic/errno-base.h
|
||||
/usr/include/asm-generic/errno.h
|
||||
/usr/include/c++/13/algorithm
|
||||
/usr/include/c++/13/backward/auto_ptr.h
|
||||
/usr/include/c++/13/backward/binders.h
|
||||
/usr/include/c++/13/bit
|
||||
/usr/include/c++/13/bits/algorithmfwd.h
|
||||
/usr/include/c++/13/bits/align.h
|
||||
/usr/include/c++/13/bits/alloc_traits.h
|
||||
/usr/include/c++/13/bits/allocated_ptr.h
|
||||
@@ -67,10 +71,12 @@ CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o
|
||||
/usr/include/c++/13/bits/shared_ptr_base.h
|
||||
/usr/include/c++/13/bits/specfun.h
|
||||
/usr/include/c++/13/bits/std_abs.h
|
||||
/usr/include/c++/13/bits/stl_algo.h
|
||||
/usr/include/c++/13/bits/stl_algobase.h
|
||||
/usr/include/c++/13/bits/stl_bvector.h
|
||||
/usr/include/c++/13/bits/stl_construct.h
|
||||
/usr/include/c++/13/bits/stl_function.h
|
||||
/usr/include/c++/13/bits/stl_heap.h
|
||||
/usr/include/c++/13/bits/stl_iterator.h
|
||||
/usr/include/c++/13/bits/stl_iterator_base_funcs.h
|
||||
/usr/include/c++/13/bits/stl_iterator_base_types.h
|
||||
@@ -83,6 +89,7 @@ CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o
|
||||
/usr/include/c++/13/bits/streambuf_iterator.h
|
||||
/usr/include/c++/13/bits/string_view.tcc
|
||||
/usr/include/c++/13/bits/stringfwd.h
|
||||
/usr/include/c++/13/bits/uniform_int_dist.h
|
||||
/usr/include/c++/13/bits/unique_ptr.h
|
||||
/usr/include/c++/13/bits/uses_allocator.h
|
||||
/usr/include/c++/13/bits/uses_allocator_args.h
|
||||
@@ -117,6 +124,7 @@ CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o
|
||||
/usr/include/c++/13/new
|
||||
/usr/include/c++/13/ostream
|
||||
/usr/include/c++/13/pstl/execution_defs.h
|
||||
/usr/include/c++/13/pstl/glue_algorithm_defs.h
|
||||
/usr/include/c++/13/pstl/glue_memory_defs.h
|
||||
/usr/include/c++/13/pstl/pstl_config.h
|
||||
/usr/include/c++/13/stdexcept
|
||||
|
@@ -2,6 +2,8 @@
|
||||
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
|
||||
|
||||
CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o: /home/cjsatnarine/Code/Raytracer/ImageGenerator.cpp \
|
||||
/home/cjsatnarine/Code/Raytracer/aabb.h \
|
||||
/home/cjsatnarine/Code/Raytracer/bvh.h \
|
||||
/home/cjsatnarine/Code/Raytracer/camera.h \
|
||||
/home/cjsatnarine/Code/Raytracer/colour.h \
|
||||
/home/cjsatnarine/Code/Raytracer/hittable.h \
|
||||
@@ -15,9 +17,11 @@ CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o: /home/cjsatnarine/Code/Raytracer/
|
||||
/usr/include/alloca.h \
|
||||
/usr/include/asm-generic/errno-base.h \
|
||||
/usr/include/asm-generic/errno.h \
|
||||
/usr/include/c++/13/algorithm \
|
||||
/usr/include/c++/13/backward/auto_ptr.h \
|
||||
/usr/include/c++/13/backward/binders.h \
|
||||
/usr/include/c++/13/bit \
|
||||
/usr/include/c++/13/bits/algorithmfwd.h \
|
||||
/usr/include/c++/13/bits/align.h \
|
||||
/usr/include/c++/13/bits/alloc_traits.h \
|
||||
/usr/include/c++/13/bits/allocated_ptr.h \
|
||||
@@ -66,10 +70,12 @@ CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o: /home/cjsatnarine/Code/Raytracer/
|
||||
/usr/include/c++/13/bits/shared_ptr_base.h \
|
||||
/usr/include/c++/13/bits/specfun.h \
|
||||
/usr/include/c++/13/bits/std_abs.h \
|
||||
/usr/include/c++/13/bits/stl_algo.h \
|
||||
/usr/include/c++/13/bits/stl_algobase.h \
|
||||
/usr/include/c++/13/bits/stl_bvector.h \
|
||||
/usr/include/c++/13/bits/stl_construct.h \
|
||||
/usr/include/c++/13/bits/stl_function.h \
|
||||
/usr/include/c++/13/bits/stl_heap.h \
|
||||
/usr/include/c++/13/bits/stl_iterator.h \
|
||||
/usr/include/c++/13/bits/stl_iterator_base_funcs.h \
|
||||
/usr/include/c++/13/bits/stl_iterator_base_types.h \
|
||||
@@ -82,6 +88,7 @@ CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o: /home/cjsatnarine/Code/Raytracer/
|
||||
/usr/include/c++/13/bits/streambuf_iterator.h \
|
||||
/usr/include/c++/13/bits/string_view.tcc \
|
||||
/usr/include/c++/13/bits/stringfwd.h \
|
||||
/usr/include/c++/13/bits/uniform_int_dist.h \
|
||||
/usr/include/c++/13/bits/unique_ptr.h \
|
||||
/usr/include/c++/13/bits/uses_allocator.h \
|
||||
/usr/include/c++/13/bits/uses_allocator_args.h \
|
||||
@@ -116,6 +123,7 @@ CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o: /home/cjsatnarine/Code/Raytracer/
|
||||
/usr/include/c++/13/new \
|
||||
/usr/include/c++/13/ostream \
|
||||
/usr/include/c++/13/pstl/execution_defs.h \
|
||||
/usr/include/c++/13/pstl/glue_algorithm_defs.h \
|
||||
/usr/include/c++/13/pstl/glue_memory_defs.h \
|
||||
/usr/include/c++/13/pstl/pstl_config.h \
|
||||
/usr/include/c++/13/stdexcept \
|
||||
@@ -325,8 +333,6 @@ CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o: /home/cjsatnarine/Code/Raytracer/
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/iscanonical.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/fp-logb.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/fp-fast.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/types/wint_t.h:
|
||||
@@ -385,13 +391,15 @@ CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o: /home/cjsatnarine/Code/Raytracer/
|
||||
|
||||
/usr/include/c++/13/tr1/hypergeometric.tcc:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h:
|
||||
/usr/include/c++/13/tr1/exp_integral.tcc:
|
||||
|
||||
/usr/include/c++/13/bits/refwrap.h:
|
||||
/usr/include/c++/13/tr1/ell_integral.tcc:
|
||||
|
||||
/usr/include/c++/13/debug/debug.h:
|
||||
/usr/include/features-time64.h:
|
||||
|
||||
/usr/include/c++/13/stdexcept:
|
||||
/usr/include/c++/13/string_view:
|
||||
|
||||
/usr/include/c++/13/string:
|
||||
|
||||
/usr/include/c++/13/bits/ostream_insert.h:
|
||||
|
||||
@@ -415,22 +423,10 @@ CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o: /home/cjsatnarine/Code/Raytracer/
|
||||
|
||||
/usr/include/c++/13/bits/char_traits.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/math-vector.h:
|
||||
|
||||
/usr/include/c++/13/bits/hash_bytes.h:
|
||||
|
||||
/usr/include/asm-generic/errno-base.h:
|
||||
|
||||
/usr/include/features-time64.h:
|
||||
|
||||
/usr/include/c++/13/string_view:
|
||||
|
||||
/usr/include/errno.h:
|
||||
|
||||
/usr/include/c++/13/bits/functional_hash.h:
|
||||
|
||||
/usr/include/c++/13/bits/nested_exception.h:
|
||||
|
||||
/usr/include/c++/13/bits/istream.tcc:
|
||||
|
||||
/usr/include/c++/13/bits/exception_ptr.h:
|
||||
@@ -465,8 +461,52 @@ CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o: /home/cjsatnarine/Code/Raytracer/
|
||||
|
||||
/usr/include/alloca.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/endianness.h:
|
||||
|
||||
/usr/include/c++/13/tr1/poly_laguerre.tcc:
|
||||
|
||||
/usr/include/c++/13/bits/basic_string.h:
|
||||
|
||||
/usr/include/c++/13/bits/specfun.h:
|
||||
|
||||
/home/cjsatnarine/Code/Raytracer/rayTracer.h:
|
||||
|
||||
/usr/include/c++/13/bits/cxxabi_forced.h:
|
||||
|
||||
/home/cjsatnarine/Code/Raytracer/vec3.h:
|
||||
|
||||
/home/cjsatnarine/Code/Raytracer/colour.h:
|
||||
|
||||
/home/cjsatnarine/Code/Raytracer/hittable.h:
|
||||
|
||||
/usr/include/c++/13/backward/binders.h:
|
||||
|
||||
/home/cjsatnarine/Code/Raytracer/aabb.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/waitflags.h:
|
||||
|
||||
/usr/include/c++/13/bits/unique_ptr.h:
|
||||
|
||||
/usr/include/c++/13/bits/align.h:
|
||||
|
||||
/usr/include/c++/13/bits/nested_exception.h:
|
||||
|
||||
/home/cjsatnarine/Code/Raytracer/bvh.h:
|
||||
|
||||
/usr/include/c++/13/bits/ostream.tcc:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h:
|
||||
|
||||
/usr/include/c++/13/bits/ios_base.h:
|
||||
|
||||
/home/cjsatnarine/Code/Raytracer/ImageGenerator.cpp:
|
||||
|
||||
/usr/include/asm-generic/errno-base.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/math-vector.h:
|
||||
|
||||
/usr/include/c++/13/bits/hash_bytes.h:
|
||||
|
||||
/usr/include/c++/13/cwctype:
|
||||
|
||||
/usr/include/c++/13/bits/predefined_ops.h:
|
||||
@@ -477,31 +517,15 @@ CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o: /home/cjsatnarine/Code/Raytracer/
|
||||
|
||||
/usr/include/c++/13/cwchar:
|
||||
|
||||
/usr/include/c++/13/bits/cxxabi_forced.h:
|
||||
/usr/include/c++/13/algorithm:
|
||||
|
||||
/home/cjsatnarine/Code/Raytracer/vec3.h:
|
||||
/usr/include/x86_64-linux-gnu/bits/types/error_t.h:
|
||||
|
||||
/home/cjsatnarine/Code/Raytracer/colour.h:
|
||||
/usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/waitflags.h:
|
||||
/home/cjsatnarine/Code/Raytracer/ray.h:
|
||||
|
||||
/usr/include/c++/13/bits/align.h:
|
||||
|
||||
/usr/include/c++/13/bits/unique_ptr.h:
|
||||
|
||||
/home/cjsatnarine/Code/Raytracer/hittable.h:
|
||||
|
||||
/usr/include/c++/13/backward/binders.h:
|
||||
|
||||
/usr/include/c++/13/bits/stringfwd.h:
|
||||
|
||||
/usr/include/c++/13/bits/ostream.tcc:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h:
|
||||
|
||||
/usr/include/c++/13/bits/ios_base.h:
|
||||
|
||||
/home/cjsatnarine/Code/Raytracer/ImageGenerator.cpp:
|
||||
/usr/include/c++/13/bits/stl_raw_storage_iter.h:
|
||||
|
||||
/usr/include/c++/13/backward/auto_ptr.h:
|
||||
|
||||
@@ -509,8 +533,26 @@ CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o: /home/cjsatnarine/Code/Raytracer/
|
||||
|
||||
/usr/include/c++/13/bit:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/time64.h:
|
||||
|
||||
/usr/include/c++/13/bits/basic_ios.h:
|
||||
|
||||
/usr/include/c++/13/tr1/bessel_function.tcc:
|
||||
|
||||
/usr/include/c++/13/bits/shared_ptr_base.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h:
|
||||
|
||||
/usr/include/locale.h:
|
||||
|
||||
/usr/include/c++/13/ext/aligned_buffer.h:
|
||||
|
||||
/usr/include/c++/13/ios:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/fp-logb.h:
|
||||
|
||||
/usr/include/c++/13/bits/algorithmfwd.h:
|
||||
|
||||
/usr/include/c++/13/bits/concept_check.h:
|
||||
|
||||
/usr/include/c++/13/bits/alloc_traits.h:
|
||||
@@ -525,30 +567,26 @@ CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o: /home/cjsatnarine/Code/Raytracer/
|
||||
|
||||
/usr/include/c++/13/bits/atomic_lockfree_defines.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/time64.h:
|
||||
|
||||
/usr/include/c++/13/bits/basic_ios.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h:
|
||||
|
||||
/usr/include/locale.h:
|
||||
|
||||
/usr/include/c++/13/ext/aligned_buffer.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/endianness.h:
|
||||
|
||||
/usr/include/c++/13/tr1/poly_laguerre.tcc:
|
||||
|
||||
/usr/include/c++/13/bits/basic_string.h:
|
||||
|
||||
/usr/include/c++/13/bits/specfun.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h:
|
||||
|
||||
/usr/include/c++/13/bits/ptr_traits.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h:
|
||||
|
||||
/usr/include/c++/13/system_error:
|
||||
|
||||
/usr/include/c++/13/bits/range_access.h:
|
||||
|
||||
/usr/include/c++/13/debug/debug.h:
|
||||
|
||||
/usr/include/c++/13/stdexcept:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h:
|
||||
|
||||
/usr/include/c++/13/bits/refwrap.h:
|
||||
|
||||
/usr/include/c++/13/bits/locale_facets.tcc:
|
||||
|
||||
/usr/include/c++/13/bits/requires_hosted.h:
|
||||
@@ -559,8 +597,18 @@ CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o: /home/cjsatnarine/Code/Raytracer/
|
||||
|
||||
/usr/include/c++/13/bits/shared_ptr.h:
|
||||
|
||||
/usr/include/c++/13/bits/stringfwd.h:
|
||||
|
||||
/usr/include/c++/13/bits/uniform_int_dist.h:
|
||||
|
||||
/usr/include/c++/13/bits/shared_ptr_atomic.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h:
|
||||
|
||||
/usr/include/c++/13/cstddef:
|
||||
|
||||
/usr/include/c++/13/bits/stl_algo.h:
|
||||
|
||||
/usr/include/c++/13/bits/stl_algobase.h:
|
||||
|
||||
/usr/include/c++/13/bits/allocator.h:
|
||||
@@ -569,6 +617,12 @@ CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o: /home/cjsatnarine/Code/Raytracer/
|
||||
|
||||
/usr/include/c++/13/bits/stl_construct.h:
|
||||
|
||||
/usr/include/c++/13/bits/stl_heap.h:
|
||||
|
||||
/usr/include/c++/13/ext/alloc_traits.h:
|
||||
|
||||
/usr/include/c++/13/new:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h:
|
||||
|
||||
/home/cjsatnarine/Code/Raytracer/material.h:
|
||||
@@ -577,22 +631,12 @@ CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o: /home/cjsatnarine/Code/Raytracer/
|
||||
|
||||
/usr/include/c++/13/bits/stl_iterator.h:
|
||||
|
||||
/usr/include/c++/13/string:
|
||||
|
||||
/usr/include/asm-generic/errno.h:
|
||||
|
||||
/usr/include/c++/13/bits/stl_iterator_base_funcs.h:
|
||||
|
||||
/usr/include/c++/13/bits/stl_iterator_base_types.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/types/error_t.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h:
|
||||
|
||||
/home/cjsatnarine/Code/Raytracer/ray.h:
|
||||
|
||||
/usr/include/c++/13/bits/stl_raw_storage_iter.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h:
|
||||
|
||||
/usr/include/c++/13/bits/stl_tempbuf.h:
|
||||
@@ -635,10 +679,10 @@ CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o: /home/cjsatnarine/Code/Raytracer/
|
||||
|
||||
/usr/include/c++/13/bits/uses_allocator_args.h:
|
||||
|
||||
/usr/include/c++/13/bits/stl_function.h:
|
||||
|
||||
/usr/include/c++/13/tr1/beta_function.tcc:
|
||||
|
||||
/usr/include/c++/13/bits/stl_function.h:
|
||||
|
||||
/usr/include/c++/13/bits/utility.h:
|
||||
|
||||
/home/cjsatnarine/Code/Raytracer/hittableList.h:
|
||||
@@ -665,10 +709,6 @@ CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o: /home/cjsatnarine/Code/Raytracer/
|
||||
|
||||
/usr/include/c++/13/ostream:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h:
|
||||
|
||||
/usr/include/c++/13/cstddef:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h:
|
||||
|
||||
/usr/include/c++/13/bits/stl_pair.h:
|
||||
@@ -683,7 +723,11 @@ CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o: /home/cjsatnarine/Code/Raytracer/
|
||||
|
||||
/usr/include/c++/13/debug/assertions.h:
|
||||
|
||||
/usr/include/c++/13/ext/concurrence.h:
|
||||
/usr/include/c++/13/tr1/gamma.tcc:
|
||||
|
||||
/usr/include/c++/13/cctype:
|
||||
|
||||
/usr/include/c++/13/ext/atomicity.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h:
|
||||
|
||||
@@ -707,36 +751,16 @@ CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o: /home/cjsatnarine/Code/Raytracer/
|
||||
|
||||
/usr/include/c++/13/limits:
|
||||
|
||||
/usr/include/c++/13/ext/alloc_traits.h:
|
||||
|
||||
/usr/include/c++/13/new:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr.h:
|
||||
|
||||
/usr/include/c++/13/bits/basic_ios.tcc:
|
||||
|
||||
/usr/include/c++/13/pstl/execution_defs.h:
|
||||
|
||||
/usr/include/c++/13/ext/concurrence.h:
|
||||
|
||||
/usr/include/c++/13/pstl/glue_algorithm_defs.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/wordsize.h:
|
||||
|
||||
/usr/include/c++/13/pstl/pstl_config.h:
|
||||
|
||||
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h:
|
||||
|
||||
/usr/include/c++/13/bits/range_access.h:
|
||||
|
||||
/usr/include/c++/13/system_error:
|
||||
|
||||
/usr/include/c++/13/bits/shared_ptr_base.h:
|
||||
|
||||
/usr/include/c++/13/tr1/bessel_function.tcc:
|
||||
|
||||
/usr/include/c++/13/tr1/exp_integral.tcc:
|
||||
|
||||
/usr/include/c++/13/tr1/ell_integral.tcc:
|
||||
|
||||
/usr/include/c++/13/cctype:
|
||||
|
||||
/usr/include/c++/13/ext/atomicity.h:
|
||||
|
||||
/usr/include/c++/13/tr1/gamma.tcc:
|
||||
|
BIN
build/Raytracer
BIN
build/Raytracer
Binary file not shown.
76
bvh.h
Normal file
76
bvh.h
Normal file
@@ -0,0 +1,76 @@
|
||||
#ifndef BVH_H
|
||||
#define BVH_H
|
||||
|
||||
#include "aabb.h"
|
||||
#include <algorithm>
|
||||
#include "hittable.h"
|
||||
#include "hittableList.h"
|
||||
#include "rayTracer.h"
|
||||
|
||||
class bvh_node : public hittable {
|
||||
public:
|
||||
bvh_node(hittableList list) : bvh_node(list.objects, 0, list.objects.size()) {
|
||||
// This constructor (without span indices) creates an implicit copy of the hittable list, which we will modify. The lifetime of the copied list only extends until this constructor exits.
|
||||
}
|
||||
|
||||
bvh_node(std::vector<shared_ptr<hittable>>& objects, size_t start, size_t end) {
|
||||
int axis = randomInt(0,2);
|
||||
|
||||
auto comparator = (axis == 0) ? boxXCompare
|
||||
: (axis == 1) ? boxYCompare
|
||||
: boxZCompare;
|
||||
|
||||
size_t object_span = end - start;
|
||||
|
||||
if (object_span == 1) {
|
||||
left = right = objects[start];
|
||||
} else if (object_span == 2) {
|
||||
left = objects[start];
|
||||
right = objects[start+1];
|
||||
} else {
|
||||
std::sort(objects.begin() + start, objects.begin() + end, comparator);
|
||||
|
||||
auto mid = start + object_span / 2;
|
||||
left = make_shared<bvh_node>(objects, start, mid);
|
||||
right = make_shared<bvh_node>(objects, mid, end);
|
||||
}
|
||||
|
||||
bBox = aabb(left->boundingBox(), right->boundingBox());
|
||||
}
|
||||
|
||||
bool hit(const ray& r, interval ray_t, hitRecord& rec) const override {
|
||||
if (!bBox.hit(r, ray_t)) return false;
|
||||
|
||||
bool hitLeft = left->hit(r, ray_t, rec);
|
||||
bool hitRight = right->hit(r, interval(ray_t.min, hitLeft ? rec.t : ray_t.max), rec);
|
||||
|
||||
return hitLeft || hitRight;
|
||||
}
|
||||
|
||||
aabb boundingBox() const override { return bBox; }
|
||||
|
||||
private:
|
||||
shared_ptr<hittable> left;
|
||||
shared_ptr<hittable> right;
|
||||
aabb bBox;
|
||||
|
||||
static bool boxCompare(const shared_ptr<hittable> a, const shared_ptr<hittable> b, int axisIndex) {
|
||||
auto aAxisInterval = a->boundingBox().axisInterval(axisIndex);
|
||||
auto bAxisInterval = b->boundingBox().axisInterval(axisIndex);
|
||||
return aAxisInterval.min < bAxisInterval.min;
|
||||
}
|
||||
|
||||
static bool boxXCompare(const shared_ptr<hittable> a, const shared_ptr<hittable> b) {
|
||||
return boxCompare(a, b, 0);
|
||||
}
|
||||
|
||||
static bool boxYCompare(const shared_ptr<hittable> a, const shared_ptr<hittable> b) {
|
||||
return boxCompare(a, b, 1);
|
||||
}
|
||||
|
||||
static bool boxZCompare(const shared_ptr<hittable> a, const shared_ptr<hittable> b) {
|
||||
return boxCompare(a, b, 2);
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
@@ -2,6 +2,7 @@
|
||||
#define HITTABLE_H
|
||||
|
||||
#include "rayTracer.h"
|
||||
#include "aabb.h"
|
||||
|
||||
class material;
|
||||
|
||||
@@ -29,6 +30,8 @@ class hittable {
|
||||
virtual ~hittable() = default;
|
||||
|
||||
virtual bool hit(const ray& r, interval rayT, hitRecord& rec) const = 0;
|
||||
|
||||
virtual aabb boundingBox() const = 0;
|
||||
};
|
||||
|
||||
#endif
|
@@ -1,11 +1,15 @@
|
||||
#ifndef HITTABLE_LIST_H
|
||||
#define HITTABLE_LIST_H
|
||||
|
||||
#include "aabb.h"
|
||||
#include "hittable.h"
|
||||
#include "rayTracer.h"
|
||||
#include <vector>
|
||||
|
||||
class hittableList : public hittable {
|
||||
private:
|
||||
aabb bBox;
|
||||
|
||||
public:
|
||||
std::vector<shared_ptr<hittable>> objects;
|
||||
|
||||
@@ -20,6 +24,7 @@ class hittableList : public hittable {
|
||||
|
||||
void add(shared_ptr<hittable> object) {
|
||||
objects.push_back(object);
|
||||
bBox = aabb(bBox, object->boundingBox());
|
||||
}
|
||||
|
||||
bool hit (const ray& r, interval rayT, hitRecord& rec) const override {
|
||||
@@ -38,6 +43,10 @@ class hittableList : public hittable {
|
||||
|
||||
return hitAnything;
|
||||
}
|
||||
|
||||
aabb boundingBox() const override {
|
||||
return bBox;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
11
interval.h
11
interval.h
@@ -12,6 +12,12 @@ class interval {
|
||||
|
||||
interval(double min, double max) : min(min), max(max) {}
|
||||
|
||||
interval(const interval& a, const interval& b) {
|
||||
// Create the interval tightly enclosing the two input intervals.
|
||||
min = a.min <= b.min ? a.min : b.min;
|
||||
max = a.max >= b.max ? a.max : b.max;
|
||||
}
|
||||
|
||||
double size() const {
|
||||
return max - min;
|
||||
}
|
||||
@@ -30,6 +36,11 @@ class interval {
|
||||
return x;
|
||||
}
|
||||
|
||||
interval expand(double delta) const {
|
||||
auto padding = delta / 2;
|
||||
return interval(min - padding, max + padding);
|
||||
}
|
||||
|
||||
static const interval empty, universe;
|
||||
};
|
||||
|
||||
|
@@ -40,6 +40,11 @@ inline double randomDouble(double min, double max) {
|
||||
return min + (max - min) * randomDouble();
|
||||
}
|
||||
|
||||
inline int randomInt(int min, int max) {
|
||||
// Returns a random integer in [min, max].
|
||||
return int(randomDouble(min, max++));
|
||||
}
|
||||
|
||||
// Common headers.
|
||||
#include "colour.h"
|
||||
#include "interval.h"
|
||||
|
15
sphere.h
15
sphere.h
@@ -11,6 +11,7 @@ class sphere : public hittable {
|
||||
shared_ptr<material> mat;
|
||||
bool isMoving;
|
||||
vec3 centreVec;
|
||||
aabb bBox;
|
||||
|
||||
point3 sphereCentre(double time) const {
|
||||
// Linearly interpolate from centre1 to centre2 accoedingf to time, where t=0 yields centre1 and t=1 yields centre2.
|
||||
@@ -19,10 +20,18 @@ class sphere : public hittable {
|
||||
|
||||
public:
|
||||
// Stationary sphere.
|
||||
sphere(const point3& centre, double radius, shared_ptr<material> mat) : centre1(centre), radius(fmax(0, radius)), mat(mat), isMoving(false) {}
|
||||
sphere(const point3& centre, double radius, shared_ptr<material> mat) : centre1(centre), radius(fmax(0, radius)), mat(mat), isMoving(false) {
|
||||
auto rvec = vec3(radius, radius, radius);
|
||||
bBox = aabb(centre1 - rvec, centre1 + rvec);
|
||||
}
|
||||
|
||||
// Moving sphere.
|
||||
sphere(const point3& centre1, const point3& centre2, double radius, shared_ptr<material> mat) : centre1(centre1), radius(fmax(0, radius)), mat(mat), isMoving(true) {
|
||||
auto rvec = vec3(radius, radius, radius);
|
||||
aabb box1(centre1 - rvec, centre1 + rvec);
|
||||
aabb box2(centre2 - rvec, centre2 + rvec);
|
||||
bBox = aabb(box1, box2);
|
||||
|
||||
centreVec = centre2 - centre1;
|
||||
}
|
||||
|
||||
@@ -59,6 +68,10 @@ class sphere : public hittable {
|
||||
return true;
|
||||
}
|
||||
|
||||
aabb boundingBox() const override {
|
||||
return bBox;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user