Ray Tracing, Version 4.7
Day #12

Goal: Ray trace a scene where

  • the only objects in the scene are generic spheres, planes, squares, tapered cylinders, and cubes.
  • the objects may have been translated, scaled, and/or rotated with respect to an axis
  • in addition to color, the attributes of each object may include material coefficients for diffuse, specular, ambient color
  • a positional light may be placed in the scene
  • in addition to material attributes,
    • all the objects may be textured with a 2D image
    • all the objects may be textured with a 3D generated texture, such as wood and marble
  • the images are defined in ppm formatted files
  • the light has a diffuse, specular, and ambient component
    • the light may be
      • positional, specified by postion
        • positional spotlight, specified by
          • position
          • cutoff angle
          • spotlight direction
          • spot exponent
      • directional, specified by directional vector
  • the light may be attenuated, specified by
    • kc, constant coefficient
    • kl, linear coefficient
    • kq, quadratic coefficient
  • a value for global ambient light may be assigned
  • shadows are correctly rendered, including on textured surface
  • descriptions of the objects, lights, and camera, as well as the names of the image files, are read in from a file, using SDL
  • value for backgroundColor is now read in from the scene description file, using SDL

Ray Tracing Tools:

Change class Light so that it has data members

GLdoubleVector spotDirection, dir;
GLdouble cutoffAngle;
GLdouble spotExponent;
GLdouble spotEffect;
GLdouble attenuationFactor;
GLdouble distance, kc, kl, kq;
bool isSpotlight;
bool isDirectional;

and change its constructor so that it initializes both the booleans to false, kc to 1.0, attenuationFactor to 1.0, and spotEffect to 1.0.

Scene:

Make change to readScene so that it parses

cutoffAngle
spotExponent
spotDirection
dir (for the directional light)
kc, kl, kq (attenuation coefficients)

Make change to shade so that, for each light source,

Examples:

My example files are finally correct and are in /classes/cs3114/Advanced_Graphics/files. All examples use the wood texture and all have a cutoff angle of 35 degrees. The only thing that changes from example to example is the spotExponent.

spot_exp2.scn (uses spotExponent = 2.0)
spot_exp10.scn
(uses spotExponent = 10)
spot_exp50.scn
spot_exp100.scn
spot_exp150.scn
spot_exp200.scn