Implemented quadrilaterals
This commit is contained in:
@@ -12,6 +12,7 @@ add_executable(Raytracer
|
|||||||
interval.h
|
interval.h
|
||||||
material.h
|
material.h
|
||||||
perlin.h
|
perlin.h
|
||||||
|
quad.h
|
||||||
ray.h
|
ray.h
|
||||||
rayTracer.h
|
rayTracer.h
|
||||||
rtw_stb_image.h
|
rtw_stb_image.h
|
||||||
|
15
aabb.h
15
aabb.h
@@ -9,13 +9,17 @@ class aabb {
|
|||||||
|
|
||||||
aabb() {} // The default AABB is empty, since intervals are empty by default.
|
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 interval& x, const interval& y, const interval& z) : x(x), y(y), z(z) {
|
||||||
|
padToMinimums();
|
||||||
|
}
|
||||||
|
|
||||||
aabb(const point3& a, const point3& b) {
|
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.
|
// 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]);
|
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]);
|
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]);
|
z = (a[2] <= b[2]) ? interval(a[2], b[2]) : interval(b[2], a[2]);
|
||||||
|
|
||||||
|
padToMinimums();
|
||||||
}
|
}
|
||||||
|
|
||||||
aabb(const aabb& box0, const aabb& box1) {
|
aabb(const aabb& box0, const aabb& box1) {
|
||||||
@@ -64,6 +68,15 @@ class aabb {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const aabb empty, universe;
|
static const aabb empty, universe;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void padToMinimums() {
|
||||||
|
// Adjust the AABB so that no side is narrower than some delta, padding if necessary.
|
||||||
|
double delta = 0.001;
|
||||||
|
if (x.size() < delta) x = x.expand(delta);
|
||||||
|
if (y.size() < delta) y = y.expand(delta);
|
||||||
|
if (z.size() < delta) z = z.expand(delta);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const aabb aabb::empty = aabb(interval::empty, interval::empty, interval::empty);
|
const aabb aabb::empty = aabb(interval::empty, interval::empty, interval::empty);
|
||||||
|
@@ -39,7 +39,7 @@
|
|||||||
{
|
{
|
||||||
"directoryIndex" : 0,
|
"directoryIndex" : 0,
|
||||||
"id" : "Raytracer::@6890427a1f51a3e7e1df",
|
"id" : "Raytracer::@6890427a1f51a3e7e1df",
|
||||||
"jsonFile" : "target-Raytracer-Debug-f0c538276ccb345994b1.json",
|
"jsonFile" : "target-Raytracer-Debug-a7a28e10c70f59ab4ce6.json",
|
||||||
"name" : "Raytracer",
|
"name" : "Raytracer",
|
||||||
"projectIndex" : 0
|
"projectIndex" : 0
|
||||||
}
|
}
|
@@ -26,7 +26,7 @@
|
|||||||
"objects" :
|
"objects" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"jsonFile" : "codemodel-v2-3e9cc36c8bdbe2ee1863.json",
|
"jsonFile" : "codemodel-v2-4489d9e12eae5f29aa72.json",
|
||||||
"kind" : "codemodel",
|
"kind" : "codemodel",
|
||||||
"version" :
|
"version" :
|
||||||
{
|
{
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"jsonFile" : "codemodel-v2-3e9cc36c8bdbe2ee1863.json",
|
"jsonFile" : "codemodel-v2-4489d9e12eae5f29aa72.json",
|
||||||
"kind" : "codemodel",
|
"kind" : "codemodel",
|
||||||
"version" :
|
"version" :
|
||||||
{
|
{
|
@@ -95,7 +95,8 @@
|
|||||||
12,
|
12,
|
||||||
13,
|
13,
|
||||||
14,
|
14,
|
||||||
15
|
15,
|
||||||
|
16
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -152,6 +153,11 @@
|
|||||||
"path" : "perlin.h",
|
"path" : "perlin.h",
|
||||||
"sourceGroupIndex" : 1
|
"sourceGroupIndex" : 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"backtrace" : 1,
|
||||||
|
"path" : "quad.h",
|
||||||
|
"sourceGroupIndex" : 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"backtrace" : 1,
|
"backtrace" : 1,
|
||||||
"path" : "ray.h",
|
"path" : "ray.h",
|
@@ -13,6 +13,7 @@ CMakeFiles/Raytracer.dir/main.cpp.o
|
|||||||
/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/perlin.h
|
||||||
|
/home/cjsatnarine/Code/Raytracer/quad.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
|
||||||
|
@@ -12,6 +12,7 @@ CMakeFiles/Raytracer.dir/main.cpp.o: /home/cjsatnarine/Code/Raytracer/main.cpp \
|
|||||||
/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/perlin.h \
|
||||||
|
/home/cjsatnarine/Code/Raytracer/quad.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 \
|
||||||
@@ -274,6 +275,8 @@ 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/x86_64-linux-gnu/sys/cdefs.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:
|
||||||
@@ -302,10 +305,6 @@ CMakeFiles/Raytracer.dir/main.cpp.o: /home/cjsatnarine/Code/Raytracer/main.cpp \
|
|||||||
|
|
||||||
/home/cjsatnarine/Code/Raytracer/rtw_stb_image.h:
|
/home/cjsatnarine/Code/Raytracer/rtw_stb_image.h:
|
||||||
|
|
||||||
/usr/include/c++/13/ostream:
|
|
||||||
|
|
||||||
/usr/include/c++/13/tr1/riemann_zeta.tcc:
|
|
||||||
|
|
||||||
/usr/include/c++/13/cmath:
|
/usr/include/c++/13/cmath:
|
||||||
|
|
||||||
/usr/include/x86_64-linux-gnu/c++/13/bits/error_constants.h:
|
/usr/include/x86_64-linux-gnu/c++/13/bits/error_constants.h:
|
||||||
@@ -380,12 +379,6 @@ CMakeFiles/Raytracer.dir/main.cpp.o: /home/cjsatnarine/Code/Raytracer/main.cpp \
|
|||||||
|
|
||||||
/usr/include/c++/13/bits/shared_ptr_atomic.h:
|
/usr/include/c++/13/bits/shared_ptr_atomic.h:
|
||||||
|
|
||||||
/usr/include/c++/13/bits/stringfwd.h:
|
|
||||||
|
|
||||||
/usr/include/c++/13/bits/shared_ptr.h:
|
|
||||||
|
|
||||||
/usr/include/x86_64-linux-gnu/bits/struct_mutex.h:
|
|
||||||
|
|
||||||
/usr/include/c++/13/bits/locale_facets.tcc:
|
/usr/include/c++/13/bits/locale_facets.tcc:
|
||||||
|
|
||||||
/usr/include/c++/13/bits/refwrap.h:
|
/usr/include/c++/13/bits/refwrap.h:
|
||||||
@@ -412,6 +405,8 @@ CMakeFiles/Raytracer.dir/main.cpp.o: /home/cjsatnarine/Code/Raytracer/main.cpp \
|
|||||||
|
|
||||||
/usr/include/c++/13/cwctype:
|
/usr/include/c++/13/cwctype:
|
||||||
|
|
||||||
|
/usr/include/c++/13/bits/move.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:
|
||||||
@@ -460,6 +455,10 @@ CMakeFiles/Raytracer.dir/main.cpp.o: /home/cjsatnarine/Code/Raytracer/main.cpp \
|
|||||||
|
|
||||||
/home/cjsatnarine/Code/Raytracer/bvh.h:
|
/home/cjsatnarine/Code/Raytracer/bvh.h:
|
||||||
|
|
||||||
|
/usr/include/c++/13/bits/cxxabi_forced.h:
|
||||||
|
|
||||||
|
/home/cjsatnarine/Code/Raytracer/vec3.h:
|
||||||
|
|
||||||
/usr/include/assert.h:
|
/usr/include/assert.h:
|
||||||
|
|
||||||
/usr/include/c++/13/backward/auto_ptr.h:
|
/usr/include/c++/13/backward/auto_ptr.h:
|
||||||
@@ -468,10 +467,6 @@ CMakeFiles/Raytracer.dir/main.cpp.o: /home/cjsatnarine/Code/Raytracer/main.cpp \
|
|||||||
|
|
||||||
/home/cjsatnarine/Code/Raytracer/external/stb_image.h:
|
/home/cjsatnarine/Code/Raytracer/external/stb_image.h:
|
||||||
|
|
||||||
/home/cjsatnarine/Code/Raytracer/vec3.h:
|
|
||||||
|
|
||||||
/usr/include/c++/13/bits/cxxabi_forced.h:
|
|
||||||
|
|
||||||
/home/cjsatnarine/Code/Raytracer/colour.h:
|
/home/cjsatnarine/Code/Raytracer/colour.h:
|
||||||
|
|
||||||
/usr/include/c++/13/bits/streambuf.tcc:
|
/usr/include/c++/13/bits/streambuf.tcc:
|
||||||
@@ -494,6 +489,8 @@ CMakeFiles/Raytracer.dir/main.cpp.o: /home/cjsatnarine/Code/Raytracer/main.cpp \
|
|||||||
|
|
||||||
/home/cjsatnarine/Code/Raytracer/aabb.h:
|
/home/cjsatnarine/Code/Raytracer/aabb.h:
|
||||||
|
|
||||||
|
/usr/include/c++/13/bits/stringfwd.h:
|
||||||
|
|
||||||
/usr/include/c++/13/backward/binders.h:
|
/usr/include/c++/13/backward/binders.h:
|
||||||
|
|
||||||
/home/cjsatnarine/Code/Raytracer/hittable.h:
|
/home/cjsatnarine/Code/Raytracer/hittable.h:
|
||||||
@@ -502,6 +499,16 @@ CMakeFiles/Raytracer.dir/main.cpp.o: /home/cjsatnarine/Code/Raytracer/main.cpp \
|
|||||||
|
|
||||||
/usr/include/c++/13/bits/concept_check.h:
|
/usr/include/c++/13/bits/concept_check.h:
|
||||||
|
|
||||||
|
/usr/include/c++/13/bits/shared_ptr.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/struct_mutex.h:
|
||||||
|
|
||||||
|
/home/cjsatnarine/Code/Raytracer/quad.h:
|
||||||
|
|
||||||
|
/usr/include/c++/13/bits/exception_ptr.h:
|
||||||
|
|
||||||
|
/usr/include/c++/13/bits/istream.tcc:
|
||||||
|
|
||||||
/usr/include/c++/13/ext/aligned_buffer.h:
|
/usr/include/c++/13/ext/aligned_buffer.h:
|
||||||
|
|
||||||
/usr/include/locale.h:
|
/usr/include/locale.h:
|
||||||
@@ -544,12 +551,14 @@ CMakeFiles/Raytracer.dir/main.cpp.o: /home/cjsatnarine/Code/Raytracer/main.cpp \
|
|||||||
|
|
||||||
/usr/include/alloca.h:
|
/usr/include/alloca.h:
|
||||||
|
|
||||||
|
/usr/include/c++/13/ostream:
|
||||||
|
|
||||||
|
/usr/include/c++/13/tr1/riemann_zeta.tcc:
|
||||||
|
|
||||||
/usr/include/c++/13/bits/cpp_type_traits.h:
|
/usr/include/c++/13/bits/cpp_type_traits.h:
|
||||||
|
|
||||||
/usr/include/x86_64-linux-gnu/bits/types.h:
|
/usr/include/x86_64-linux-gnu/bits/types.h:
|
||||||
|
|
||||||
/usr/include/c++/13/bits/move.h:
|
|
||||||
|
|
||||||
/usr/include/c++/13/bits/localefwd.h:
|
/usr/include/c++/13/bits/localefwd.h:
|
||||||
|
|
||||||
/usr/include/c++/13/bits/streambuf_iterator.h:
|
/usr/include/c++/13/bits/streambuf_iterator.h:
|
||||||
@@ -566,10 +575,6 @@ CMakeFiles/Raytracer.dir/main.cpp.o: /home/cjsatnarine/Code/Raytracer/main.cpp \
|
|||||||
|
|
||||||
/usr/include/x86_64-linux-gnu/bits/uintn-identity.h:
|
/usr/include/x86_64-linux-gnu/bits/uintn-identity.h:
|
||||||
|
|
||||||
/usr/include/c++/13/bits/exception_ptr.h:
|
|
||||||
|
|
||||||
/usr/include/c++/13/bits/istream.tcc:
|
|
||||||
|
|
||||||
/usr/include/c++/13/bits/functional_hash.h:
|
/usr/include/c++/13/bits/functional_hash.h:
|
||||||
|
|
||||||
/usr/include/errno.h:
|
/usr/include/errno.h:
|
||||||
@@ -789,5 +794,3 @@ CMakeFiles/Raytracer.dir/main.cpp.o: /home/cjsatnarine/Code/Raytracer/main.cpp \
|
|||||||
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h:
|
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h:
|
||||||
|
|
||||||
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
|
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
|
||||||
|
|
||||||
/usr/include/x86_64-linux-gnu/sys/cdefs.h:
|
|
||||||
|
Binary file not shown.
@@ -215,4 +215,5 @@ CMakeFiles/Raytracer.dir/main.cpp.o: \
|
|||||||
/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 \
|
||||||
/usr/include/strings.h /usr/include/c++/13/math.h /usr/include/assert.h \
|
/usr/include/strings.h /usr/include/c++/13/math.h /usr/include/assert.h \
|
||||||
|
/home/cjsatnarine/Code/Raytracer/quad.h \
|
||||||
/home/cjsatnarine/Code/Raytracer/sphere.h
|
/home/cjsatnarine/Code/Raytracer/sphere.h
|
||||||
|
BIN
build/Raytracer
BIN
build/Raytracer
Binary file not shown.
39
main.cpp
39
main.cpp
@@ -4,6 +4,7 @@
|
|||||||
#include "hittable.h"
|
#include "hittable.h"
|
||||||
#include "hittableList.h"
|
#include "hittableList.h"
|
||||||
#include "material.h"
|
#include "material.h"
|
||||||
|
#include "quad.h"
|
||||||
#include "sphere.h"
|
#include "sphere.h"
|
||||||
#include "texture.h"
|
#include "texture.h"
|
||||||
|
|
||||||
@@ -167,8 +168,41 @@ void perlinSpheres() {
|
|||||||
cam.render(world);
|
cam.render(world);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void quads() {
|
||||||
|
hittableList world;
|
||||||
|
|
||||||
|
// Materials.
|
||||||
|
auto leftRed = make_shared<lambertian>(colour(1.0, 0.2, 0.2));
|
||||||
|
auto backGreen = make_shared<lambertian>(colour(0.2, 1.0, 0.2));
|
||||||
|
auto rightBlue = make_shared<lambertian>(colour(0.2, 0.2, 1.0));
|
||||||
|
auto upperOrange = make_shared<lambertian>(colour(1.0, 0.5, 0.0));
|
||||||
|
auto lowerTeal = make_shared<lambertian>(colour(0.2, 0.8, 0.8));
|
||||||
|
|
||||||
|
//Quads.
|
||||||
|
world.add(make_shared<quad>(point3(-3,-2, 5), vec3(0, 0,-4), vec3(0, 4, 0), leftRed));
|
||||||
|
world.add(make_shared<quad>(point3(-2,-2, 0), vec3(4, 0, 0), vec3(0, 4, 0), backGreen));
|
||||||
|
world.add(make_shared<quad>(point3( 3,-2, 1), vec3(0, 0, 4), vec3(0, 4, 0), rightBlue));
|
||||||
|
world.add(make_shared<quad>(point3(-2, 3, 1), vec3(4, 0, 0), vec3(0, 0, 4), upperOrange));
|
||||||
|
world.add(make_shared<quad>(point3(-2,-3, 5), vec3(4, 0, 0), vec3(0, 0,-4), lowerTeal));
|
||||||
|
|
||||||
|
camera cam;
|
||||||
|
|
||||||
|
cam.aspectRatio = 1.0;
|
||||||
|
cam.imageWidth = 800;
|
||||||
|
cam.samplesPerPixel = 100;
|
||||||
|
cam.maxDepth = 50;
|
||||||
|
|
||||||
|
cam.vFieldOfView = 80;
|
||||||
|
cam.lookFrom = point3(0, 0, 9);
|
||||||
|
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 = 5;
|
int sceneToShow = 6;
|
||||||
|
|
||||||
switch (sceneToShow) {
|
switch (sceneToShow) {
|
||||||
case 1:
|
case 1:
|
||||||
@@ -186,5 +220,8 @@ int main(void) {
|
|||||||
case 5:
|
case 5:
|
||||||
perlinSpheres();
|
perlinSpheres();
|
||||||
break;
|
break;
|
||||||
|
case 6:
|
||||||
|
quads();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
81
quad.h
Normal file
81
quad.h
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
#ifndef QUAD_H
|
||||||
|
#define QUAD_H
|
||||||
|
|
||||||
|
#include "rayTracer.h"
|
||||||
|
#include "hittable.h"
|
||||||
|
|
||||||
|
class quad : public hittable {
|
||||||
|
public:
|
||||||
|
quad(const point3& Q, const vec3& u, const vec3& v, shared_ptr<material> material) : Q(Q), u(u), v(v), mat(material) {
|
||||||
|
auto n = cross(u, v);
|
||||||
|
normal = unitVector(n);
|
||||||
|
D = dot(normal, Q);
|
||||||
|
w = n / dot(n, n);
|
||||||
|
|
||||||
|
setBoundingBox();
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void setBoundingBox() {
|
||||||
|
// Computer the bounding box of all four vertices.
|
||||||
|
auto boundingBoxDiagonal1 = aabb(Q, Q + u + v);
|
||||||
|
auto boundingBoxDiagonal2 = aabb(Q + u, Q + v);
|
||||||
|
bBox = aabb(boundingBoxDiagonal1, boundingBoxDiagonal2);
|
||||||
|
}
|
||||||
|
|
||||||
|
aabb boundingBox() const override {
|
||||||
|
return bBox;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hit(const ray& r, interval rayT, hitRecord& rec) const override {
|
||||||
|
auto denom = dot(normal, r.direction());
|
||||||
|
|
||||||
|
// No hit if the ray is parallel to the plane.
|
||||||
|
if (fabs(denom) < 1e-8) return false;
|
||||||
|
|
||||||
|
// Return false if the hit point parameter t is outside of the ray interval.
|
||||||
|
auto t = (D - dot(normal, r.origin())) / denom;
|
||||||
|
if (!rayT.contains(t)) return false;
|
||||||
|
|
||||||
|
// Determine the hit point lies within the planar shape using its plane coordinates.
|
||||||
|
auto intersection = r.at(t);
|
||||||
|
vec3 planarHitpointVector = intersection - Q;
|
||||||
|
auto alpha = dot(w, cross(planarHitpointVector, v));
|
||||||
|
auto beta = dot(w, cross(u, planarHitpointVector));
|
||||||
|
|
||||||
|
if (!isInterior(alpha, beta, rec)) return false;
|
||||||
|
|
||||||
|
// Ray hits the 2D shape. Set the rest of the hit record and return true;
|
||||||
|
rec.t = t;
|
||||||
|
rec.p = intersection;
|
||||||
|
rec.mat = mat;
|
||||||
|
rec.setFaceNormal(r, normal);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual bool isInterior(double a, double b, hitRecord& rec) const {
|
||||||
|
interval unitInterval = interval(0, 1);
|
||||||
|
|
||||||
|
// Given the hit point in plane coordinates, return false if it is outside the primitive, otherwise set the hit record UV coordinates and return true.
|
||||||
|
if (!unitInterval.contains(a) || !unitInterval.contains(b)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
rec.u = a;
|
||||||
|
rec.v = b;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
point3 Q;
|
||||||
|
vec3 u;
|
||||||
|
vec3 v;
|
||||||
|
vec3 w;
|
||||||
|
shared_ptr<material> mat;
|
||||||
|
aabb bBox;
|
||||||
|
vec3 normal;
|
||||||
|
double D;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
Reference in New Issue
Block a user