Index: shaders/ship.frag
===================================================================
--- shaders/ship.frag	(revision aa00bf26c9cb6d636fe5573dfe6d000f6e1a88c4)
+++ shaders/ship.frag	(revision e1308e874d193cdc00723f7df1f19245df234d38)
@@ -2,9 +2,8 @@
 #extension GL_ARB_separate_shader_objects : enable
 
-//in vec3 position_eye, normal_eye, color, light_position_eye, light2_position_eye;
 layout(location = 0) in vec3 position_eye;
 layout(location = 1) in vec3 color;
-layout(location = 2) in vec3 light_position_eye;
-layout(location = 3) in vec3 light2_position_eye;
+layout(location = 2) in vec3 normal_eye;
+layout(location = 3) in vec3 light_position_eye;
 
 layout(location = 0) out vec4 outColor;
@@ -12,10 +11,10 @@
 // fixed point light properties
 vec3 Ls = vec3(1.0, 1.0, 1.0);
-vec3 Ld = vec3(1.0, 1.0, 1.0);
+vec3 Ld = vec3(0.7, 0.7, 0.7);
 vec3 La = vec3(0.2, 0.2, 0.2);
 
-// surface reflectance
+// reflectance of the object surface
 vec3 Ks = vec3(1.0, 1.0, 1.0);
-vec3 Kd = vec3(1.0, 1.5, 1.0);
+vec3 Kd = vec3(1.0, 0.5, 0.0);
 vec3 Ka = vec3(0.2, 0.2, 0.2);
 float specular_exponent = 100.0; // specular 'power'
@@ -29,30 +28,19 @@
 
    vec3 direction_to_light_eye = normalize(light_position_eye - position_eye);
-   //float dot_prod = max(dot(direction_to_light_eye, normal_eye), 0.0);
+   float dot_prod = max(dot(direction_to_light_eye, normal_eye), 0.0);
 
    // diffuse intensity
-   //vec3 Id = Ld * color * dot_prod;
+   vec3 Id = Ld * color * dot_prod;
+   //vec3 Id = Ld * Kd * dot_prod;
 
-   vec3 direction_to_light2_eye = normalize(light2_position_eye - position_eye);
-   //float dot_prod2 = max(dot(direction_to_light2_eye, normal_eye), 0.0);
+   vec3 surface_to_viewer_eye = normalize(-position_eye);
 
-   // diffuse intensity
-   //vec3 Id2 = Ld * color * dot_prod2;
-
-   //vec3 surface_to_viewer_eye = normalize(-position_eye);
-
-   //vec3 reflection_eye = reflect(-direction_to_light_eye, normal_eye);
-   //float dot_prod_specular = max(dot(reflection_eye, surface_to_viewer_eye), 0.0);
-   //float specular_factor = pow(dot_prod_specular, specular_exponent);
-
-   //vec3 reflection_eye2 = reflect(-direction_to_light2_eye, normal_eye);
-   //float dot_prod_specular2 = max(dot(reflection_eye2, surface_to_viewer_eye), 0.0);
-   //float specular_factor2 = pow(dot_prod_specular2, specular_exponent);
+   vec3 reflection_eye = reflect(-direction_to_light_eye, normal_eye);
+   float dot_prod_specular = max(dot(reflection_eye, surface_to_viewer_eye), 0.0);
+   float specular_factor = pow(dot_prod_specular, specular_exponent);
 
    // specular intensity
-   //vec3 Is = Ls * Ks * specular_factor;
-   //vec3 Is2 = Ls * Ks * specular_factor2;
+   vec3 Is = Ls * Ks * specular_factor;
 
-   //outColor = vec4((Is + Id + Ia + Is2 + Id2 + Ia2)/2, 1.0);
-   outColor = vec4(color, 1.0);
+   outColor = vec4(Is + Id + Ia, 1.0);
 }
Index: shaders/ship.vert
===================================================================
--- shaders/ship.vert	(revision aa00bf26c9cb6d636fe5573dfe6d000f6e1a88c4)
+++ shaders/ship.vert	(revision e1308e874d193cdc00723f7df1f19245df234d38)
@@ -2,5 +2,4 @@
 #extension GL_ARB_separate_shader_objects : enable
 
-// TODO: Figure out if the UniformBufferObject label is necessary and, if not, remove it
 layout (binding = 0) uniform UniformBufferObject {
    mat4 model;
@@ -11,24 +10,28 @@
 layout(location = 0) in vec3 vertex_position;
 layout(location = 1) in vec3 vertex_color;
-//layout(location = 2) in vec3 vertex_normal;
+layout(location = 2) in vec3 vertex_normal;
 //layout(location = 3) in uint ubo_index;
 
-//out vec3 position_eye, normal_eye, color, light_position_eye, light2_position_eye;
 layout(location = 0) out vec3 position_eye;
 layout(location = 1) out vec3 color;
-layout(location = 2) out vec3 light_position_eye;
-layout(location = 3) out vec3 light2_position_eye;
+layout(location = 2) out vec3 normal_eye;
+layout(location = 3) out vec3 light_position_eye;
 
 // fixed point light position
-vec3 light_position_world = vec3(0.0, 0.0, 2.0);
-vec3 light2_position_world = vec3(0.0, 1.5, -0.1);
+//vec3 light_position_world = vec3(0.0, 0.0, 2.0);
+vec3 light_position_world = vec3(0.4, 1.5, 0.8);
+//vec3 light_position_world = vec3(0.0, 1.0, -1.0);
 
+// TODO: This does not account for scaling in the model matrix
+// Check Anton's book to see how to fix this
 void main() {
+   position_eye = vec3(ubo.view * ubo.model * vec4(vertex_position, 1.0));
    //position_eye = vec3(view * model_mats[ubo_index] * vec4(vertex_position, 1.0));
-   position_eye = vec3(ubo.view * ubo.model * vec4(vertex_position, 1.0));
+
+   // Using 0.0 instead of 1.0 means translations won't effect the normal
+   normal_eye = normalize(vec3(ubo.view * ubo.model * vec4(vertex_normal, 0.0)));
    //normal_eye = normalize(vec3(view * model_mats[ubo_index] * vec4(vertex_normal, 0.0)));
    color = vertex_color;
    light_position_eye = vec3(ubo.view * vec4(light_position_world, 1.0));
-   light2_position_eye = vec3(ubo.view * vec4(light2_position_world, 1.0));
 
    gl_Position = ubo.proj * vec4(position_eye, 1.0);
