Surface Shader (even more)
// Compute illumination due to reflection
if (kr > 0) {
float t = v.dot(n);
if (t > 0) {
t *= 2;
Vector3D reflect = new Vector3D(t*n.x - v.x,
t*n.y - v.y,
t*n.z - v.z);
Vector3D poffset = new Vector3D(p.x + TINY*reflect.x,
p.y + TINY*reflect.y,
p.z + TINY*reflect.z);
Ray reflectedRay = new Ray(poffset, reflect);
if (reflectedRay.trace(objects)) {
Color rcolor = reflectedRay.Shade(lights, objects, bgnd);
r += kr*rcolor.getRed();
g += kr*rcolor.getGreen();
b += kr*rcolor.getBlue();
} else {
r += kr*bgnd.getRed();
g += kr*bgnd.getGreen();
b += kr*bgnd.getBlue();
}
}
}
|