Index: shaders/ship.vert
===================================================================
--- shaders/ship.vert	(revision 60578ce4dcc921e61972a900007888a9a06964ea)
+++ shaders/ship.vert	(revision a79be34adfe13383d4a6091a3e3e7b7a6055febc)
@@ -27,8 +27,6 @@
 
 // fixed point light positions
-//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(7.0, -7.0, -10.0);
-vec3 light2_position_world = vec3(4.0, -3.0, -10.0);
+vec3 light_position_world = vec3(0.0, 0.0, 2.0);
+vec3 light2_position_world = vec3(0.0, 1.5, -0.1);
 
 // TODO: This does not account for scaling in the model matrix
Index: vulkan-game.cpp
===================================================================
--- vulkan-game.cpp	(revision 60578ce4dcc921e61972a900007888a9a06964ea)
+++ vulkan-game.cpp	(revision a79be34adfe13383d4a6091a3e3e7b7a6055febc)
@@ -267,6 +267,6 @@
    // TODO: With the normals, indexing basically becomes pointless since no vertices will have exactly
    // the same data. Add an option to make some pipelines not use indexing
-   /*
    shipPipeline.addObject(
+      centerObject<ShipVertex>(
       addObjectIndex<ShipVertex>(shipPipeline.getObjects().size(),
       addVertexNormals<ShipVertex>({
@@ -466,5 +466,5 @@
          {{  1.5f,   0.0f,   0.0f}, {0.0f, 0.0f, 0.3f}},
          {{  1.3f,   0.0f,  -0.3f}, {0.0f, 0.0f, 0.3f}},
-      })), {
+      }))), {
            0,   1,   2,   3,   4,   5,
            6,   7,   8,   9,  10,  11,
@@ -497,27 +497,4 @@
          135, 136, 137,
       }, commandPool, graphicsQueue);
-   */
-
-   // z-range is 0 to 1, with +1 pointing into the screen
-   shipPipeline.addObject(
-      addObjectIndex<ShipVertex>(shipPipeline.getObjects().size(),
-      addVertexNormals<ShipVertex>({
-         {{  40.0f,   40.0f,  72.0f}, {0.0f, 0.6f, 0.0f}},
-         {{ -40.0f,   40.0f,  80.0f}, {0.0f, 0.6f, 0.0f}},
-         {{ -40.0f,  -40.0f,  80.0f}, {0.0f, 0.6f, 0.0f}},
-         {{  40.0f,   40.0f,  72.0f}, {0.0f, 0.6f, 0.0f}},
-         {{ -40.0f,  -40.0f,  80.0f}, {0.0f, 0.6f, 0.0f}},
-         {{  40.0f,  -40.0f,  72.0f}, {0.0f, 0.6f, 0.0f}},
-
-         {{   8.0f,    8.0f,  34.0f}, {0.0f, 0.0f, 0.7f}},
-         {{  -8.0f,    8.0f,  30.0f}, {0.0f, 0.0f, 0.7f}},
-         {{  -8.0f,   -8.0f,  30.0f}, {0.0f, 0.0f, 0.7f}},
-         {{   8.0f,    8.0f,  34.0f}, {0.0f, 0.0f, 0.7f}},
-         {{  -8.0f,   -8.0f,  30.0f}, {0.0f, 0.0f, 0.7f}},
-         {{   8.0f,   -8.0f,  34.0f}, {0.0f, 0.0f, 0.7f}},
-      })), {
-         0,   1,   2,   3,   4,   5,
-         6,   7,   8,   9,   10,   11,
-      }, commandPool, graphicsQueue);
 
    shipPipeline.createDescriptorSetLayout();
@@ -549,5 +526,5 @@
 
    float cam_yaw = 0.0f;
-   float cam_pitch = 0.0f; // -50.0f;
+   float cam_pitch = -50.0f;
 
    mat4 yaw_mat = rotate(mat4(1.0f), radians(-cam_yaw), vec3(0.0f, 1.0f, 0.0f));
Index: vulkan-game.hpp
===================================================================
--- vulkan-game.hpp	(revision 60578ce4dcc921e61972a900007888a9a06964ea)
+++ vulkan-game.hpp	(revision a79be34adfe13383d4a6091a3e3e7b7a6055febc)
@@ -4,5 +4,5 @@
 #define GLM_FORCE_RADIANS
 #define GLM_FORCE_DEPTH_ZERO_TO_ONE // Since, in Vulkan, the depth range is 0 to 1 instead of -1 to 1
-#define GLM_FORCE_LEFT_HANDED
+#define GLM_FORCE_RIGHT_HANDED
 
 #include <glm/glm.hpp>
@@ -186,4 +186,7 @@
       vector<VertexType> addObjectIndex(unsigned int objIndex, vector<VertexType> vertices);
 
+      template<class VertexType>
+      vector<VertexType> centerObject(vector<VertexType> vertices);
+
       void createBufferSet(VkDeviceSize bufferSize, VkBufferUsageFlags flags,
          vector<VkBuffer>& buffers, vector<VkDeviceMemory>& buffersMemory, vector<VkDescriptorBufferInfo>& bufferInfoList);
@@ -207,6 +210,5 @@
       vec3 p3 = vertices[i+2].pos;
 
-      // flip the y axis so that +y points up
-      vec3 normal = -normalize(cross(p2 - p1, p3 - p1));
+      vec3 normal = normalize(cross(p2 - p1, p3 - p1));
 
       // Add the same normal for all 3 vertices
@@ -228,3 +230,42 @@
 }
 
+template<class VertexType>
+vector<VertexType> VulkanGame::centerObject(vector<VertexType> vertices) {
+   float min_x = vertices[0].pos.x;
+   float max_x = vertices[0].pos.x;
+   float min_y = vertices[0].pos.y;
+   float max_y = vertices[0].pos.y;
+   float min_z = vertices[0].pos.z;
+   float max_z = vertices[0].pos.z;
+
+   // start from the second point
+   for (unsigned int i = 1; i < vertices.size(); i++) {
+      if (min_x > vertices[i].pos.x) {
+         min_x = vertices[i].pos.x;
+      } else if (max_x < vertices[i].pos.x) {
+         max_x = vertices[i].pos.x;
+      }
+
+      if (min_y > vertices[i].pos.y) {
+         min_y = vertices[i].pos.y;
+      } else if (max_y < vertices[i].pos.y) {
+         max_y = vertices[i].pos.y;
+      }
+
+      if (min_z > vertices[i].pos.z) {
+         min_z = vertices[i].pos.z;
+      } else if (max_z < vertices[i].pos.z) {
+         max_z = vertices[i].pos.z;
+      }
+   }
+
+   vec3 center = vec3(min_x + max_x, min_y + max_y, min_z + max_z) / 2.0f;
+
+   for (unsigned int i = 0; i < vertices.size(); i++) {
+      vertices[i].pos -= center;
+   }
+
+   return vertices;
+}
+
 #endif // _VULKAN_GAME_H
