Add boxes to cornell box
This commit is contained in:
22
quad.h
22
quad.h
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "rayTracer.h"
|
||||
#include "hittable.h"
|
||||
#include "hittableList.h"
|
||||
|
||||
class quad : public hittable {
|
||||
public:
|
||||
@@ -77,5 +78,26 @@ class quad : public hittable {
|
||||
double D;
|
||||
};
|
||||
|
||||
inline shared_ptr<hittableList> box(const point3& a, const point3& b, shared_ptr<material> mat) {
|
||||
// Returns the 3D box (six sides) that contains the two opposite vertices a and b.
|
||||
|
||||
auto sides = make_shared<hittableList>();
|
||||
|
||||
// Construct the two opposite vertices with the minimum and maximum coordinates.
|
||||
auto min = point3(fmin(a.x(), b.x()), fmin(a.y(), b.y()), fmin(a.z(), b.z()));
|
||||
auto max = point3(fmax(a.x(), b.x()), fmax(a.y(), b.y()), fmax(a.z(), b.z()));
|
||||
|
||||
auto dx = vec3(max.x() - min.x(), 0, 0);
|
||||
auto dy = vec3(0, max.y() - min.y(), 0);
|
||||
auto dz = vec3(0, 0, max.z() - min.z());
|
||||
|
||||
sides->add(make_shared<quad>(point3(min.x(), min.y(), max.z()), dx, dy, mat)); // front
|
||||
sides->add(make_shared<quad>(point3(max.x(), min.y(), max.z()), -dz, dy, mat)); // right
|
||||
sides->add(make_shared<quad>(point3(max.x(), min.y(), min.z()), -dx, dy, mat)); // back
|
||||
sides->add(make_shared<quad>(point3(min.x(), min.y(), min.z()), dz, dy, mat)); // left
|
||||
sides->add(make_shared<quad>(point3(min.x(), max.y(), max.z()), dx, -dz, mat)); // top
|
||||
sides->add(make_shared<quad>(point3(min.x(), min.y(), min.z()), dx, dz, mat)); // bottom
|
||||
|
||||
return sides;
|
||||
}
|
||||
#endif
|
Reference in New Issue
Block a user