Index: vulkan-game.cpp
===================================================================
--- vulkan-game.cpp	(revision 2ff4d3eeb328c5e09a58bcfc4a12c8ad134345e4)
+++ vulkan-game.cpp	(revision 2ba5617346eb7058fde4f0035cce4db10bdb801f)
@@ -683,19 +683,4 @@
       }
 
-      // TODO: Remove this block of code and correctly update the center of all objects when they are transformed
-      if (gui->keyPressed(SDL_SCANCODE_X)) {
-         if (asteroidObjects.size() > 0 && !asteroidObjects[0].ssbo.deleted) {
-            asteroidObjects[0].model_transform = translate(mat4(1.0f), vec3(0.0f, 0.0f, this->asteroidSpeed * this->elapsedTime))
-               * asteroidObjects[0].model_transform;
-
-            vec3 obj_center = vec3(asteroid_VP_mats.view * vec4(asteroidObjects[0].center, 1.0f));
-
-            float closest = obj_center.z - asteroidObjects[0].radius;
-            cout << closest << " ? " << -NEAR_CLIP << endl;
-
-            updateObject(asteroidObjects, asteroidPipeline, 0);
-         }
-      }
-
       renderUI();
       renderScene();
@@ -717,9 +702,15 @@
    }
 
-   for (int i = 0; i < asteroidObjects.size(); i++) {
-      if (!asteroidObjects[i].ssbo.deleted) {
-         asteroidObjects[i].model_transform =
-            translate(mat4(1.0f), vec3(0.0f, 0.0f, this->asteroidSpeed * this->elapsedTime)) *
-            asteroidObjects[i].model_transform;
+   for (int i = 0; i < this->asteroidObjects.size(); i++) {
+      if (!this->asteroidObjects[i].ssbo.deleted) {
+         vec3 objCenter = vec3(viewMat * vec4(this->asteroidObjects[i].center, 1.0f));
+
+         if ((objCenter.z - this->asteroidObjects[i].radius) > -NEAR_CLIP) {
+            this->asteroidObjects[i].ssbo.deleted = true;
+         } else {
+            this->asteroidObjects[i].model_transform =
+               translate(mat4(1.0f), vec3(0.0f, 0.0f, this->asteroidSpeed * this->elapsedTime)) *
+               this->asteroidObjects[i].model_transform;
+         }
 
          updateObject(asteroidObjects, asteroidPipeline, i);
@@ -794,8 +785,13 @@
          }, true);
 
-      // translate(mat4(1.0f), vec3(getRandomNum(-1.3f, 1.3f), -1.2f, getRandomNum(-5.5f, -4.5f))) *
-      // translate(mat4(1.0f), vec3(0.0504826f, -1.2f, 1.0f)) *
+      // This accounts for the scaling in model_base.
+      // Dividing by 8 instead of 10 since the bounding radius algorithm
+      // under-calculates the true value.
+      // TODO: Figure out the best way to take scaling into account when calculating the radius
+      // Keep in mind that the main complicating factor is the currently poor radius calculation
+      asteroidObjects.back().radius /= 8.0f;
+
       asteroidObjects.back().model_base =
-         translate(mat4(1.0f), vec3(getRandomNum(-1.3f, 1.3f), -1.2f, -2.0f)) *
+         translate(mat4(1.0f), vec3(getRandomNum(-1.3f, 1.3f), -1.2f, getRandomNum(-5.5f, -4.5f))) *
          rotate(mat4(1.0f), radians(60.0f), vec3(1.0f, 1.0f, -1.0f)) *
          scale(mat4(1.0f), vec3(0.1f, 0.1f, 0.1f));
Index: vulkan-game.hpp
===================================================================
--- vulkan-game.hpp	(revision 2ff4d3eeb328c5e09a58bcfc4a12c8ad134345e4)
+++ vulkan-game.hpp	(revision 2ba5617346eb7058fde4f0035cce4db10bdb801f)
@@ -61,6 +61,6 @@
    mat4 model_base;
    mat4 model_transform;
-   vec3 center;
-   float radius;
+   vec3 center; // currently only matters for asteroids
+   float radius; // currently only matters for asteroids
 };
 
@@ -159,4 +159,7 @@
       // Or maybe create a higher level wrapper around GraphicsPipeline_Vulkan to hold things like
       // the objects vector, the ubo, and the ssbo
+
+      // TODO: Rename *_VP_mats to *_uniforms and possibly use different types for each one
+      // if there is a need to add other uniform variables to one or more of the shaders
 
       GraphicsPipeline_Vulkan<ModelVertex, SSBO_ModelObject> modelPipeline;
@@ -263,4 +266,9 @@
 // and to change the model matrix later by setting model_transform and then calling updateObject()
 // Figure out a better way to allow the model matrix to be set during objecting creation
+
+// TODO: Maybe return a reference to the object from this method if I decide that updating it
+// immediately after creation is a good idea (such as setting model_base)
+// Currently, model_base is set like this in a few places and the radius is set for asteroids
+// to account for scaling
 template<class VertexType, class SSBOType>
 void VulkanGame::addObject(vector<SceneObject<VertexType, SSBOType>>& objects,
@@ -268,4 +276,6 @@
       const vector<VertexType>& vertices, vector<uint16_t> indices, SSBOType ssbo,
       bool pipelinesCreated) {
+   // TODO: Use the model field of ssbo to set the object's model_base
+   // currently, the passed in model is useless since it gets overridden in updateObject() anyway
    size_t numVertices = pipeline.getNumVertices();
 
@@ -275,7 +285,9 @@
 
    objects.push_back({ vertices, indices, ssbo, mat4(1.0f), mat4(1.0f) });
-   centerObject(objects.back());
-
-   bool storageBufferResized = pipeline.addObject(vertices, indices, ssbo, commandPool, graphicsQueue);
+
+   SceneObject<VertexType, SSBOType>& obj = objects.back();
+   centerObject(obj);
+
+   bool storageBufferResized = pipeline.addObject(obj.vertices, obj.indices, obj.ssbo, commandPool, graphicsQueue);
 
    if (pipelinesCreated) {
@@ -304,8 +316,5 @@
 
    obj.ssbo.model = obj.model_transform * obj.model_base;
-
-   // could probably re-calculate the object center here based on model
-   // I think the center should be calculated by using model * vec3(0, 0, 0)
-   // model_base is currently only used to set the original location of the ship and asteroids
+   obj.center = vec3(obj.ssbo.model * vec4(0.0f, 0.0f, 0.0f, 1.0f));
 
    pipeline.updateObject(index, obj.ssbo);
@@ -379,6 +388,7 @@
    }
 
-   object.radius = std::max(center.x, center.y);
-   object.radius = std::max(object.radius, center.z);
+   object.radius = std::max(max_x - center.x, max_y - center.y);
+   object.radius = std::max(object.radius, max_z - center.z);
+
    object.center = vec3(0.0f, 0.0f, 0.0f);
 }
