ディフューズシェーディング

2009-07-16

レイトレーサーを作るシリーズ:

視線が当たった位置の面法線と光源への方向との角度(内積)を調べて明るさにする:

color shading(vec pos, vec normal, vec light_pos) {
vec lv = light_pos.sub(pos).normal();
float f = max(normal.dot(lv), 0);
return color(255 * f, 0, 0);
}

vec light_pos = new vec(10, 10, -10);

...
float t = intersect_line_sphere(eyepos, raydir, sphere_center, sphere_radius);
if (t >= 0) {
vec pos = eyepos.add(raydir.scale(t)); // 交差位置
vec nrm = pos.sub(sphere_center).normal(); // 法線
img[j] = shading(pos, nrm, light_pos);
} else {
img[j] = color(0, 0, 0);
}