Skip to content

Commit f5b4153

Browse files
committed
Solution for tri, ellipse, annulus primitives
Adding this for reference. To be removed in the following commit, since we won't be using these.
1 parent 7b6be62 commit f5b4153

File tree

2 files changed

+91
-3
lines changed

2 files changed

+91
-3
lines changed

src/TheNextWeek/main.cc

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -325,16 +325,38 @@ void quad_test(scene& scene_desc) {
325325
scene_desc.max_depth = 4;
326326

327327
scene_desc.cam.aperture = 0.0;
328-
scene_desc.cam.vfov = 30.0;
328+
scene_desc.cam.vfov = 20.0;
329329
scene_desc.cam.lookfrom = point3(0,0,12);
330330
scene_desc.cam.lookat = point3(0,0,0);
331331

332-
scene_desc.background = color(0.80, 0.80, 0.80);
332+
scene_desc.background = color(0.90, 0.90, 0.90);
333333

334334
auto earth_texture = make_shared<image_texture>("earthmap.jpg");
335335
auto mat = make_shared<lambertian>(earth_texture);
336336

337-
scene_desc.world.add(make_shared<quad>(point3(-2,-1,0), vec3(4,0,0), vec3(0,2,0), mat));
337+
shared_ptr<hittable> thing;
338+
switch (0) {
339+
default:
340+
case 0:
341+
thing = make_shared<quad>(point3(-2,-1,0), vec3(4,0,0), vec3(0,2,0), mat);
342+
break;
343+
case 1:
344+
scene_desc.cam.vfov = 30.0;
345+
scene_desc.cam.lookat = point3(1,0,0);
346+
thing = make_shared<quad>(point3(-2,-1,0), vec3(4,0,0), vec3(2,2,0), mat);
347+
break;
348+
case 2:
349+
thing = make_shared<tri>(point3(-2,-1,0), vec3(4,0,0), vec3(0,2,0), mat);
350+
break;
351+
case 3:
352+
thing = make_shared<ellipse>(point3(0,0,0), vec3(2,0,0), vec3(0,1,0), mat);
353+
break;
354+
case 4:
355+
thing = make_shared<annulus>(point3(0,0,0), vec3(2,0,0), vec3(0,1,0), 0.60, mat);
356+
break;
357+
}
358+
359+
scene_desc.world.add(thing);
338360
}
339361

340362

src/TheNextWeek/quad.h

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,4 +113,70 @@ inline shared_ptr<hittable_list> box(const point3& a, const point3& b, shared_pt
113113
}
114114

115115

116+
class tri : public quad {
117+
public:
118+
tri(const point3& o, const vec3& aa, const vec3& ab, shared_ptr<material> m)
119+
: quad(o, aa, ab, m)
120+
{}
121+
122+
virtual bool hit_ab(double a, double b, hit_record& rec) const override {
123+
if ((a < 0) || (b < 0) || (a + b > 1))
124+
return false;
125+
126+
rec.u = a;
127+
rec.v = b;
128+
return true;
129+
}
130+
};
131+
132+
133+
class ellipse : public quad {
134+
public:
135+
ellipse(
136+
const point3& center, const vec3& side_A, const vec3& side_B, shared_ptr<material> m
137+
) : quad(center, side_A, side_B, m)
138+
{}
139+
140+
virtual void set_bounding_box() override {
141+
bbox = aabb(plane_origin - axis_A - axis_B, plane_origin + axis_A + axis_B).pad();
142+
}
143+
144+
virtual bool hit_ab(double a, double b, hit_record& rec) const override {
145+
if ((a*a + b*b) > 1)
146+
return false;
147+
148+
rec.u = a/2 + 0.5;
149+
rec.v = b/2 + 0.5;
150+
return true;
151+
}
152+
};
153+
154+
155+
class annulus : public quad {
156+
public:
157+
annulus(
158+
const point3& center, const vec3& side_A, const vec3& side_B, double _inner,
159+
shared_ptr<material> m)
160+
: quad(center, side_A, side_B, m), inner(_inner)
161+
{}
162+
163+
virtual void set_bounding_box() override {
164+
bbox = aabb(plane_origin - axis_A - axis_B, plane_origin + axis_A + axis_B).pad();
165+
}
166+
167+
virtual bool hit_ab(double a, double b, hit_record& rec) const override {
168+
auto center_dist = sqrt(a*a + b*b);
169+
if ((center_dist < inner) || (center_dist > 1))
170+
return false;
171+
172+
rec.u = a/2 + 0.5;
173+
rec.v = b/2 + 0.5;
174+
return true;
175+
}
176+
177+
private:
178+
double inner;
179+
};
180+
181+
116182
#endif

0 commit comments

Comments
 (0)