Made the Matrix4.inverse function directly return an identity matrix
incase its input is null, instead of calling the copy constructor (which
does the same thing).
1. Modified Matrix4#multiply(Vector3f) to multiply the matrix's upper
3x3 submatrix with the vector instead of converting the vector to
homogeneous coordinates, performing the multiplication with the
complete 4x4 matrix, then reverting back to affine coordinates.
2. Removed the PhongRenderer#vertexProgram method override because the
code was bogus and unnecessary. Only the fragment program needs to be
overriden.
Refactored ColorRGB* code.
1. Removed Vertex#calculateNormal(NORMAL) since it's no longer needed.
2. Added per-pixel lighting to the Phong renderer.
3. Implemented ambient lighting.
4. Added a call to clear the rendering processing queue before applying
a renderer. This makes sure that all lights are removed before the queue
can be rebuilt.
Added an incomplete lighting model. It only considers cases where spot
lights are used. The diffuse contribution does not work yet.