Implement BVH
This commit is contained in:
@@ -3,6 +3,8 @@ project(Raytracer VERSION 0.1.0 LANGUAGES C CXX)
|
|||||||
|
|
||||||
add_executable(Raytracer
|
add_executable(Raytracer
|
||||||
ImageGenerator.cpp
|
ImageGenerator.cpp
|
||||||
|
aabb.h
|
||||||
|
bvh.h
|
||||||
camera.h
|
camera.h
|
||||||
colour.h
|
colour.h
|
||||||
hittable.h
|
hittable.h
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
#include "rayTracer.h"
|
#include "rayTracer.h"
|
||||||
|
#include "bvh.h"
|
||||||
#include "camera.h"
|
#include "camera.h"
|
||||||
#include "hittable.h"
|
#include "hittable.h"
|
||||||
#include "hittableList.h"
|
#include "hittableList.h"
|
||||||
@@ -9,18 +10,6 @@ int main(void) {
|
|||||||
// World.
|
// World.
|
||||||
hittableList 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.
|
// Code from the book.
|
||||||
auto ground_material = make_shared<lambertian>(colour(0.5, 0.5, 0.5));
|
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));
|
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);
|
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.add(make_shared<sphere>(point3(4, 1, 0), 1.0, material3));
|
||||||
|
|
||||||
|
world = hittableList(make_shared<bvh_node>(world));
|
||||||
|
|
||||||
// Camera.
|
// Camera.
|
||||||
camera cam;
|
camera cam;
|
||||||
cam.aspectRatio = 16.0 / 9.0;
|
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,
|
"directoryIndex" : 0,
|
||||||
"id" : "Raytracer::@6890427a1f51a3e7e1df",
|
"id" : "Raytracer::@6890427a1f51a3e7e1df",
|
||||||
"jsonFile" : "target-Raytracer-Debug-de18b889ec06b3c1ffd0.json",
|
"jsonFile" : "target-Raytracer-Debug-53e51d7b7c539400eaa2.json",
|
||||||
"name" : "Raytracer",
|
"name" : "Raytracer",
|
||||||
"projectIndex" : 0
|
"projectIndex" : 0
|
||||||
}
|
}
|
@@ -26,7 +26,7 @@
|
|||||||
"objects" :
|
"objects" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"jsonFile" : "codemodel-v2-3325df503f174f7a816b.json",
|
"jsonFile" : "codemodel-v2-f57fe542ed13663d4779.json",
|
||||||
"kind" : "codemodel",
|
"kind" : "codemodel",
|
||||||
"version" :
|
"version" :
|
||||||
{
|
{
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"jsonFile" : "codemodel-v2-3325df503f174f7a816b.json",
|
"jsonFile" : "codemodel-v2-f57fe542ed13663d4779.json",
|
||||||
"kind" : "codemodel",
|
"kind" : "codemodel",
|
||||||
"version" :
|
"version" :
|
||||||
{
|
{
|
@@ -90,7 +90,9 @@
|
|||||||
7,
|
7,
|
||||||
8,
|
8,
|
||||||
9,
|
9,
|
||||||
10
|
10,
|
||||||
|
11,
|
||||||
|
12
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -102,6 +104,16 @@
|
|||||||
"path" : "ImageGenerator.cpp",
|
"path" : "ImageGenerator.cpp",
|
||||||
"sourceGroupIndex" : 0
|
"sourceGroupIndex" : 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"backtrace" : 1,
|
||||||
|
"path" : "aabb.h",
|
||||||
|
"sourceGroupIndex" : 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"backtrace" : 1,
|
||||||
|
"path" : "bvh.h",
|
||||||
|
"sourceGroupIndex" : 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"backtrace" : 1,
|
"backtrace" : 1,
|
||||||
"path" : "camera.h",
|
"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/interval.h \
|
||||||
/home/cjsatnarine/Code/Raytracer/vec3.h \
|
/home/cjsatnarine/Code/Raytracer/vec3.h \
|
||||||
/home/cjsatnarine/Code/Raytracer/ray.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/hittable.h \
|
||||||
/home/cjsatnarine/Code/Raytracer/material.h \
|
|
||||||
/home/cjsatnarine/Code/Raytracer/hittableList.h \
|
/home/cjsatnarine/Code/Raytracer/hittableList.h \
|
||||||
/usr/include/c++/13/vector /usr/include/c++/13/bits/stl_vector.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/stl_bvector.h \
|
||||||
/usr/include/c++/13/bits/vector.tcc \
|
/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
|
/home/cjsatnarine/Code/Raytracer/sphere.h
|
||||||
|
@@ -3,6 +3,8 @@
|
|||||||
|
|
||||||
CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o
|
CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o
|
||||||
/home/cjsatnarine/Code/Raytracer/ImageGenerator.cpp
|
/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/camera.h
|
||||||
/home/cjsatnarine/Code/Raytracer/colour.h
|
/home/cjsatnarine/Code/Raytracer/colour.h
|
||||||
/home/cjsatnarine/Code/Raytracer/hittable.h
|
/home/cjsatnarine/Code/Raytracer/hittable.h
|
||||||
@@ -16,9 +18,11 @@ CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o
|
|||||||
/usr/include/alloca.h
|
/usr/include/alloca.h
|
||||||
/usr/include/asm-generic/errno-base.h
|
/usr/include/asm-generic/errno-base.h
|
||||||
/usr/include/asm-generic/errno.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/auto_ptr.h
|
||||||
/usr/include/c++/13/backward/binders.h
|
/usr/include/c++/13/backward/binders.h
|
||||||
/usr/include/c++/13/bit
|
/usr/include/c++/13/bit
|
||||||
|
/usr/include/c++/13/bits/algorithmfwd.h
|
||||||
/usr/include/c++/13/bits/align.h
|
/usr/include/c++/13/bits/align.h
|
||||||
/usr/include/c++/13/bits/alloc_traits.h
|
/usr/include/c++/13/bits/alloc_traits.h
|
||||||
/usr/include/c++/13/bits/allocated_ptr.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/shared_ptr_base.h
|
||||||
/usr/include/c++/13/bits/specfun.h
|
/usr/include/c++/13/bits/specfun.h
|
||||||
/usr/include/c++/13/bits/std_abs.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_algobase.h
|
||||||
/usr/include/c++/13/bits/stl_bvector.h
|
/usr/include/c++/13/bits/stl_bvector.h
|
||||||
/usr/include/c++/13/bits/stl_construct.h
|
/usr/include/c++/13/bits/stl_construct.h
|
||||||
/usr/include/c++/13/bits/stl_function.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.h
|
||||||
/usr/include/c++/13/bits/stl_iterator_base_funcs.h
|
/usr/include/c++/13/bits/stl_iterator_base_funcs.h
|
||||||
/usr/include/c++/13/bits/stl_iterator_base_types.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/streambuf_iterator.h
|
||||||
/usr/include/c++/13/bits/string_view.tcc
|
/usr/include/c++/13/bits/string_view.tcc
|
||||||
/usr/include/c++/13/bits/stringfwd.h
|
/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/unique_ptr.h
|
||||||
/usr/include/c++/13/bits/uses_allocator.h
|
/usr/include/c++/13/bits/uses_allocator.h
|
||||||
/usr/include/c++/13/bits/uses_allocator_args.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/new
|
||||||
/usr/include/c++/13/ostream
|
/usr/include/c++/13/ostream
|
||||||
/usr/include/c++/13/pstl/execution_defs.h
|
/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/glue_memory_defs.h
|
||||||
/usr/include/c++/13/pstl/pstl_config.h
|
/usr/include/c++/13/pstl/pstl_config.h
|
||||||
/usr/include/c++/13/stdexcept
|
/usr/include/c++/13/stdexcept
|
||||||
|
@@ -2,6 +2,8 @@
|
|||||||
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
|
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
|
||||||
|
|
||||||
CMakeFiles/Raytracer.dir/ImageGenerator.cpp.o: /home/cjsatnarine/Code/Raytracer/ImageGenerator.cpp \
|
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/camera.h \
|
||||||
/home/cjsatnarine/Code/Raytracer/colour.h \
|
/home/cjsatnarine/Code/Raytracer/colour.h \
|
||||||
/home/cjsatnarine/Code/Raytracer/hittable.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/alloca.h \
|
||||||
/usr/include/asm-generic/errno-base.h \
|
/usr/include/asm-generic/errno-base.h \
|
||||||
/usr/include/asm-generic/errno.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/auto_ptr.h \
|
||||||
/usr/include/c++/13/backward/binders.h \
|
/usr/include/c++/13/backward/binders.h \
|
||||||
/usr/include/c++/13/bit \
|
/usr/include/c++/13/bit \
|
||||||
|
/usr/include/c++/13/bits/algorithmfwd.h \
|
||||||
/usr/include/c++/13/bits/align.h \
|
/usr/include/c++/13/bits/align.h \
|
||||||
/usr/include/c++/13/bits/alloc_traits.h \
|
/usr/include/c++/13/bits/alloc_traits.h \
|
||||||
/usr/include/c++/13/bits/allocated_ptr.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/shared_ptr_base.h \
|
||||||
/usr/include/c++/13/bits/specfun.h \
|
/usr/include/c++/13/bits/specfun.h \
|
||||||
/usr/include/c++/13/bits/std_abs.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_algobase.h \
|
||||||
/usr/include/c++/13/bits/stl_bvector.h \
|
/usr/include/c++/13/bits/stl_bvector.h \
|
||||||
/usr/include/c++/13/bits/stl_construct.h \
|
/usr/include/c++/13/bits/stl_construct.h \
|
||||||
/usr/include/c++/13/bits/stl_function.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.h \
|
||||||
/usr/include/c++/13/bits/stl_iterator_base_funcs.h \
|
/usr/include/c++/13/bits/stl_iterator_base_funcs.h \
|
||||||
/usr/include/c++/13/bits/stl_iterator_base_types.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/streambuf_iterator.h \
|
||||||
/usr/include/c++/13/bits/string_view.tcc \
|
/usr/include/c++/13/bits/string_view.tcc \
|
||||||
/usr/include/c++/13/bits/stringfwd.h \
|
/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/unique_ptr.h \
|
||||||
/usr/include/c++/13/bits/uses_allocator.h \
|
/usr/include/c++/13/bits/uses_allocator.h \
|
||||||
/usr/include/c++/13/bits/uses_allocator_args.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/new \
|
||||||
/usr/include/c++/13/ostream \
|
/usr/include/c++/13/ostream \
|
||||||
/usr/include/c++/13/pstl/execution_defs.h \
|
/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/glue_memory_defs.h \
|
||||||
/usr/include/c++/13/pstl/pstl_config.h \
|
/usr/include/c++/13/pstl/pstl_config.h \
|
||||||
/usr/include/c++/13/stdexcept \
|
/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/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/fp-fast.h:
|
||||||
|
|
||||||
/usr/include/x86_64-linux-gnu/bits/types/wint_t.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/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:
|
/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/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/errno.h:
|
||||||
|
|
||||||
/usr/include/c++/13/bits/functional_hash.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/istream.tcc:
|
||||||
|
|
||||||
/usr/include/c++/13/bits/exception_ptr.h:
|
/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/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:
|
/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/cwctype:
|
||||||
|
|
||||||
/usr/include/c++/13/bits/predefined_ops.h:
|
/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/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/stl_raw_storage_iter.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/backward/auto_ptr.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/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/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/concept_check.h:
|
||||||
|
|
||||||
/usr/include/c++/13/bits/alloc_traits.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/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/os_defines.h:
|
||||||
|
|
||||||
/usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h:
|
/usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h:
|
||||||
|
|
||||||
/usr/include/c++/13/bits/ptr_traits.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/locale_facets.tcc:
|
||||||
|
|
||||||
/usr/include/c++/13/bits/requires_hosted.h:
|
/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/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/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/stl_algobase.h:
|
||||||
|
|
||||||
/usr/include/c++/13/bits/allocator.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_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:
|
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h:
|
||||||
|
|
||||||
/home/cjsatnarine/Code/Raytracer/material.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/bits/stl_iterator.h:
|
||||||
|
|
||||||
/usr/include/c++/13/string:
|
|
||||||
|
|
||||||
/usr/include/asm-generic/errno.h:
|
/usr/include/asm-generic/errno.h:
|
||||||
|
|
||||||
/usr/include/c++/13/bits/stl_iterator_base_funcs.h:
|
/usr/include/c++/13/bits/stl_iterator_base_funcs.h:
|
||||||
|
|
||||||
/usr/include/c++/13/bits/stl_iterator_base_types.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/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h:
|
||||||
|
|
||||||
/usr/include/c++/13/bits/stl_tempbuf.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/uses_allocator_args.h:
|
||||||
|
|
||||||
/usr/include/c++/13/bits/stl_function.h:
|
|
||||||
|
|
||||||
/usr/include/c++/13/tr1/beta_function.tcc:
|
/usr/include/c++/13/tr1/beta_function.tcc:
|
||||||
|
|
||||||
|
/usr/include/c++/13/bits/stl_function.h:
|
||||||
|
|
||||||
/usr/include/c++/13/bits/utility.h:
|
/usr/include/c++/13/bits/utility.h:
|
||||||
|
|
||||||
/home/cjsatnarine/Code/Raytracer/hittableList.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/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/x86_64-linux-gnu/bits/types/struct_FILE.h:
|
||||||
|
|
||||||
/usr/include/c++/13/bits/stl_pair.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/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:
|
/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/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/x86_64-linux-gnu/c++/13/bits/gthr.h:
|
||||||
|
|
||||||
/usr/include/c++/13/bits/basic_ios.tcc:
|
/usr/include/c++/13/bits/basic_ios.tcc:
|
||||||
|
|
||||||
/usr/include/c++/13/pstl/execution_defs.h:
|
/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/x86_64-linux-gnu/bits/wordsize.h:
|
||||||
|
|
||||||
/usr/include/c++/13/pstl/pstl_config.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
|
#define HITTABLE_H
|
||||||
|
|
||||||
#include "rayTracer.h"
|
#include "rayTracer.h"
|
||||||
|
#include "aabb.h"
|
||||||
|
|
||||||
class material;
|
class material;
|
||||||
|
|
||||||
@@ -29,6 +30,8 @@ class hittable {
|
|||||||
virtual ~hittable() = default;
|
virtual ~hittable() = default;
|
||||||
|
|
||||||
virtual bool hit(const ray& r, interval rayT, hitRecord& rec) const = 0;
|
virtual bool hit(const ray& r, interval rayT, hitRecord& rec) const = 0;
|
||||||
|
|
||||||
|
virtual aabb boundingBox() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
@@ -1,11 +1,15 @@
|
|||||||
#ifndef HITTABLE_LIST_H
|
#ifndef HITTABLE_LIST_H
|
||||||
#define HITTABLE_LIST_H
|
#define HITTABLE_LIST_H
|
||||||
|
|
||||||
|
#include "aabb.h"
|
||||||
#include "hittable.h"
|
#include "hittable.h"
|
||||||
#include "rayTracer.h"
|
#include "rayTracer.h"
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
class hittableList : public hittable {
|
class hittableList : public hittable {
|
||||||
|
private:
|
||||||
|
aabb bBox;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
std::vector<shared_ptr<hittable>> objects;
|
std::vector<shared_ptr<hittable>> objects;
|
||||||
|
|
||||||
@@ -20,6 +24,7 @@ class hittableList : public hittable {
|
|||||||
|
|
||||||
void add(shared_ptr<hittable> object) {
|
void add(shared_ptr<hittable> object) {
|
||||||
objects.push_back(object);
|
objects.push_back(object);
|
||||||
|
bBox = aabb(bBox, object->boundingBox());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool hit (const ray& r, interval rayT, hitRecord& rec) const override {
|
bool hit (const ray& r, interval rayT, hitRecord& rec) const override {
|
||||||
@@ -38,6 +43,10 @@ class hittableList : public hittable {
|
|||||||
|
|
||||||
return hitAnything;
|
return hitAnything;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
aabb boundingBox() const override {
|
||||||
|
return bBox;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
11
interval.h
11
interval.h
@@ -12,6 +12,12 @@ class interval {
|
|||||||
|
|
||||||
interval(double min, double max) : min(min), max(max) {}
|
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 {
|
double size() const {
|
||||||
return max - min;
|
return max - min;
|
||||||
}
|
}
|
||||||
@@ -30,6 +36,11 @@ class interval {
|
|||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interval expand(double delta) const {
|
||||||
|
auto padding = delta / 2;
|
||||||
|
return interval(min - padding, max + padding);
|
||||||
|
}
|
||||||
|
|
||||||
static const interval empty, universe;
|
static const interval empty, universe;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -40,6 +40,11 @@ inline double randomDouble(double min, double max) {
|
|||||||
return min + (max - min) * randomDouble();
|
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.
|
// Common headers.
|
||||||
#include "colour.h"
|
#include "colour.h"
|
||||||
#include "interval.h"
|
#include "interval.h"
|
||||||
|
15
sphere.h
15
sphere.h
@@ -11,6 +11,7 @@ class sphere : public hittable {
|
|||||||
shared_ptr<material> mat;
|
shared_ptr<material> mat;
|
||||||
bool isMoving;
|
bool isMoving;
|
||||||
vec3 centreVec;
|
vec3 centreVec;
|
||||||
|
aabb bBox;
|
||||||
|
|
||||||
point3 sphereCentre(double time) const {
|
point3 sphereCentre(double time) const {
|
||||||
// Linearly interpolate from centre1 to centre2 accoedingf to time, where t=0 yields centre1 and t=1 yields centre2.
|
// 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:
|
public:
|
||||||
// Stationary sphere.
|
// 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.
|
// 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) {
|
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;
|
centreVec = centre2 - centre1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -59,6 +68,10 @@ class sphere : public hittable {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
aabb boundingBox() const override {
|
||||||
|
return bBox;
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
Reference in New Issue
Block a user