Ray Tracing, Version 3.9

Goal: Ray trace a scene where

  • the only objects in the scene are generic spheres, generic planes, generic cubes, generic squares, and generic tapered cylinders, which may have been
    • scaled
    • translated
    • rotated with respected to an axis

  • in addition to color, the attributes of the generic sphere may include material values for diffuse, specular, ambient color
  • a positional light may be placed in the scene by specifying its position
  • the light has a diffuse, specular, and ambient component
  • a value for global ambient light may be assigned
  • (*10)multiple lights may be placed in the scene
  • the intensity of lights may be attenuated by including values for
    • constant attenuation factor
    • linear attenuation factor
    • quadratic attenuation factor
  • a spotlight may be placed in the scene by specifying its
    • position
    • spot direction
    • cutoff angle
    • spot exponent
  • shadows are correctly rendered
  • speedup: extents are used around each generic primitive (generic cube around the generic primitive is test first; if hit, then primitive is tested)
  • the camera is set up
    • at position (eyex, eyey, eyez),
    • looking at point (look_atx, look_aty, look_atz), with
    • the original up-direction for the camera being <upx, upy, upz>.

  • speed-up has been accomplished by more wisely computing the ray's direction, for each ray.
  • the scene (including camera information and sphere information) has been described in a file using Scene Description Language
  • value for backgroundColor is now read in from the scene description file, using SDL

 

Details:

In Scene::shader, make sure that the total color returned is the result of all the lights in the scene.

 

Working Directory:

Make a subdirectory v3.9 in your Working Directory. When you have version 3.9 working correctly, copy all files pertaining to it, including the makefile, to that directory and don't touch it!