Index: graphics-pipeline_vulkan.hpp
===================================================================
--- graphics-pipeline_vulkan.hpp	(revision 055750aa780089e54a6a30e8455284e2e1f4883c)
+++ graphics-pipeline_vulkan.hpp	(revision cf727ca5b76ad07619880fa102ed2fbbd918503b)
@@ -88,4 +88,7 @@
       VkDeviceMemory indexBufferMemory;
 
+      // TODO: THe objects vector isn't used at all in this class, except in the method that returns
+      // the number of objects. Move this vector and the SceneObject declaration into VulkanGame, esp.
+      // since I'll be adding other // object-specific fields sich as transforms to SceneObject later
       vector<SceneObject<VertexType>> objects;
 
Index: shaders/ship.vert
===================================================================
--- shaders/ship.vert	(revision 055750aa780089e54a6a30e8455284e2e1f4883c)
+++ shaders/ship.vert	(revision cf727ca5b76ad07619880fa102ed2fbbd918503b)
@@ -18,5 +18,5 @@
 layout(location = 1) in vec3 vertex_color;
 layout(location = 2) in vec3 vertex_normal;
-//layout(location = 3) in uint ubo_index;
+layout(location = 3) in uint obj_index;
 
 layout(location = 0) out vec3 position_eye;
@@ -33,10 +33,8 @@
 // Check Anton's book to see how to fix this
 void main() {
-   position_eye = vec3(ubo.view * sbo.objects[0].model * vec4(vertex_position, 1.0));
-   //position_eye = vec3(view * model_mats[ubo_index] * vec4(vertex_position, 1.0));
+   position_eye = vec3(ubo.view * sbo.objects[obj_index].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 * sbo.objects[0].model * vec4(vertex_normal, 0.0)));
-   //normal_eye = normalize(vec3(view * model_mats[ubo_index] * vec4(vertex_normal, 0.0)));
+   normal_eye = normalize(vec3(ubo.view * sbo.objects[obj_index].model * vec4(vertex_normal, 0.0)));
    color = vertex_color;
    light_position_eye = vec3(ubo.view * vec4(light_position_world, 1.0));
Index: vulkan-game.cpp
===================================================================
--- vulkan-game.cpp	(revision 055750aa780089e54a6a30e8455284e2e1f4883c)
+++ vulkan-game.cpp	(revision cf727ca5b76ad07619880fa102ed2fbbd918503b)
@@ -255,4 +255,5 @@
    shipPipeline.addAttribute(VK_FORMAT_R32G32B32_SFLOAT, offset_of(&ShipVertex::color));
    shipPipeline.addAttribute(VK_FORMAT_R32G32B32_SFLOAT, offset_of(&ShipVertex::normal));
+   shipPipeline.addAttribute(VK_FORMAT_R32_UINT, offset_of(&ShipVertex::objIndex));
 
    createBufferSet(sizeof(UBO_VP_mats), VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
@@ -268,5 +269,7 @@
    // 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(addVertexNormals<ShipVertex>({
+   shipPipeline.addObject(
+      addObjectIndex<ShipVertex>(shipPipeline.getObjects().size(),
+      addVertexNormals<ShipVertex>({
          //back
          {{ -0.5f,   0.3f,   0.0f}, {0.0f, 0.0f, 0.3f}},
@@ -464,5 +467,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,
Index: vulkan-game.hpp
===================================================================
--- vulkan-game.hpp	(revision 055750aa780089e54a6a30e8455284e2e1f4883c)
+++ vulkan-game.hpp	(revision cf727ca5b76ad07619880fa102ed2fbbd918503b)
@@ -33,4 +33,5 @@
    vec3 color;
    vec3 normal;
+   unsigned int objIndex;
 };
 
@@ -178,4 +179,7 @@
       vector<VertexType> addVertexNormals(vector<VertexType> vertices);
 
+      template<class VertexType>
+      vector<VertexType> addObjectIndex(unsigned int objIndex, vector<VertexType> vertices);
+
       void createBufferSet(VkDeviceSize bufferSize, VkBufferUsageFlags flags,
          vector<VkBuffer>& buffers, vector<VkDeviceMemory>& buffersMemory, vector<VkDescriptorBufferInfo>& bufferInfoList);
@@ -211,3 +215,12 @@
 }
 
+template<class VertexType>
+vector<VertexType> VulkanGame::addObjectIndex(unsigned int objIndex, vector<VertexType> vertices) {
+   for (VertexType& vertex : vertices) {
+      vertex.objIndex = objIndex;
+   }
+
+   return vertices;
+}
+
 #endif // _VULKAN_GAME_H
