Browse Source

Lesson 14.2

Godzil 3 years ago
parent
commit
5151c31627
3 changed files with 24 additions and 1 deletions
  1. 1 0
      source/include/triangle.h
  2. 6 1
      source/main.c
  3. 17 0
      source/triangle.c

+ 1 - 0
source/include/triangle.h

@@ -36,5 +36,6 @@ typedef struct triangle_t
  **********************************************************************************************************************/
 void drawTriangle(int32_t x0, int32_t y0, int32_t x1, int32_t y1, int32_t x2, int32_t y2, colour_t colour);
 void drawFilledTriangle(int32_t x0, int32_t y0, int32_t x1, int32_t y1, int32_t x2, int32_t y2, colour_t colour);
+int compareTrianglesZOrder(const void *p1, const void *p2);
 
 #endif /* THREEDENGINE_SOURCE_INCLUDE_TRIANGLE_H */

+ 6 - 1
source/main.c

@@ -183,7 +183,7 @@ void update()
             transformedVertices[j] = vec3RotateY(transformedVertices[j], mesh.rotation.y);
             transformedVertices[j] = vec3RotateZ(transformedVertices[j], mesh.rotation.z);
 
-            transformed[j].z += 5;
+            transformedVertices[j].z += 5;
         }
 
         if (!doNotCull)
@@ -223,6 +223,11 @@ void update()
                                         transformedVertices[2].z) / 3.0;
         arrayAdd(projectedTriangles, currentTriangle);
     }
+
+    qsort(projectedTriangles,
+          arrayGetSize(projectedTriangles),
+          sizeof(triangle_t),
+          compareTrianglesZOrder);
 }
 
 void render()

+ 17 - 0
source/triangle.c

@@ -105,3 +105,20 @@ void drawFilledTriangle(int32_t x0, int32_t y0, int32_t x1, int32_t y1, int32_t
         drawFillTopFlatTriangle(x1, y1, Mx, My, x2, y2, colour);
     }
 }
+
+int compareTrianglesZOrder(const void *p1, const void *p2)
+{
+    triangle_t *t1 = (struct triangle_t *)p1;
+    triangle_t *t2 = (struct triangle_t *)p2;
+
+    if (t1->averageDepth > t2->averageDepth)
+    {
+        return -1;
+    }
+    else if (t1->averageDepth < t2->averageDepth)
+    {
+        return  1;
+    }
+
+    return 0;
+}