{
const context = DOM.context2d(ewidth, height);
context.canvas.value = context;
context.transform(1, 0, 0, -1, 0, height);
const s1_origin = glm.vec3.fromValues(0, 0, 0);
const s1_radius = 0.25 * ewidth;
const s2_origin = glm.vec3.fromValues(-100, +100, 175);
const s2_radius = 0.15 * ewidth;
for (let i = 0; i < ewidth; ++i) {
for (let j = 0; j < height; ++j) {
let ray_origin = glm.vec3.scaleAndAdd(
glm.vec3.create(),
glm.vec3.scaleAndAdd(glm.vec3.create(), p_00, ihat, i),
jhat,
j
);
let ray_dir = glm.vec3.normalize(
glm.vec3.create(),
glm.vec3.subtract(glm.vec3.create(), ray_origin, eye)
);
let s1_dist = intersect_sphere(ray_origin, ray_dir, s1_origin, s1_radius);
let s2_dist = intersect_sphere(ray_origin, ray_dir, s2_origin, s2_radius);
if (s1_dist >= 0 && s2_dist < 0) context.fillStyle = "red";
else if (s1_dist < 0 && s2_dist >= 0) context.fillStyle = "green";
else if (s1_dist > 0 && s2_dist >= 0 && s2_dist < s1_dist)
context.fillStyle = "blue";
else if (s1_dist >= 0 && s2_dist >= 0 && s2_dist >= s1_dist)
context.fillStyle = "yellow";
else context.fillStyle = "black";
context.fillRect(i, j, 1, 1);
}
}
return context.canvas;
}