| (1) | _____ | 
All projection matrices, \(\bs{P}\), have the property \(\bs{P}^{T} \bs{P} = \bs{I}\). | 
| (2) | _____ | 
Insulating materials (like sand) are transparent. | 
| (3) | _____ | 
A perfect diffuser appears shiny. | 
| (4) | _____ | 
Gouraud shading and Phong shading differ in the way they handle transparency. | 
| (5) | _____ | 
In an orthographic projection the projectors are skew. | 
| (1) | _____ | 
A 3D point in Homogeneous coordinates has how many elements? | 
  | 
||
| (2) | _____ | 
A 3D rotation matrix in Cartesian coordinates has how many elements? | 
  | 
||
| (3) | _____ | 
How many prinicpal faces are visible when using an axonometric view? | 
  | 
||
| (4) | _____ | 
How many different foreshortening ratios are there in an isometric view? | 
  | 
||
| (5) | _____ | 
When light falls on a surface it can be: | 
  | 
\( \left[ \begin{array}{r r r r} 1.0& 0.5& 0.5& 0.0 \\ 0.0& 1.0& 0.0& 0.0 \\ 0.5& 0.5& 1.0& 0.0 \\ 0.0& 0.0& 0.0& 1.0 \end{array}\right] \)
to transform the point:
\( \left[ \begin{array}{r} 10.0 \\ 20.0 \\ 4.0 \\ 1.0 \end{array}\right] \)\( \bs{P} = \left[ \begin{array}{r r r r r} 10 & 7 & 20 & 30 & 1 \\ 5 & 7 & 3 & 30 & 15 \end{array}\right] \)
      and the following add() method (in pseudo-code):
      
      add(Point p, Node n)
      {
          if (p isRightOf n.point)
          {
              if (n.right == null) n.right = new Node(p)
              else                 add(p, n.right) 
          }
          else
          {
              if (n.left == null)  n.left = new Node(p)
              else                 add(p, n.left) 
          }
      }      
      
draw the binary space partitioning tree that would be generated by the following "main" method (in pseudo-code):
      root = new Node(point[0])
      for (i = 1...N-1)
      {
          add(point[i], root)
      }      
      
calculate the \(z\)-value at each relevant pixel on the scan line.
    getRotationAroundX(double phi)
    
    getRotationAroundY(double theta)
    
    (each of which returns an appropriately sized Matrix),
    complete the following trimetricView() function.
    
    /**
     * Transforms the given triangle so that it will be rendered using 
     * a trimetric view. All points are in homogeneous coordinates.
     *
     * @param phi    The rotation around the x axis
     * @param theta  The rotation around the y axis
     * @param p      The points
     * @return       The transformed points
     */
    Matrix<4,3> trimetricView(double phi, double theta, Matrix<4,3> p)
    {
    }
PhongShader class that implements the 
    Colorizer interface (i.e., extends the Colorizer
    class and implements all of the pure virtual methods).
    FlatShader class that implements the 
    Colorizer interface (i.e., extends the Colorizer
    class and implements all of the pure virtual methods). 
    It's calculateColor method must use the surface normal 
    for the triangle (which will be the same at every point), not the
    normals at the vertices.
    Copyright 2014