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

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

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);
    }