Browse Source

Lesson 13.15

Godzil 3 years ago
parent
commit
cd01ca0c0a
4 changed files with 29 additions and 19 deletions
  1. 3 0
      source/include/display.h
  2. 2 0
      source/include/triangle.h
  3. 8 5
      source/main.c
  4. 16 14
      source/mesh.c

+ 3 - 0
source/include/display.h

@@ -61,4 +61,7 @@ static inline void intSwap(int *a, int *b)
     *b = tmp;
 }
 
+#define MAKE_RGB(_r, _g, _b) ((0xFF000000) | ((_r & 0xFF) << 16) | ((_g & 0xFF) << 8) | ((_b & 0xFF)))
+#define MAKE_ARGB(_a, _r, _g, _b) (((_a & 0xFF) << 24) | ((_r & 0xFF) << 16) | ((_g & 0xFF) << 8) | ((_b & 0xFF)))
+
 #endif /* THREEDENGINE_SOURCE_INCLUDE_DISPLAY_H */

+ 2 - 0
source/include/triangle.h

@@ -21,11 +21,13 @@
 typedef struct face_t
 {
     int a, b, c;
+    colour_t colour;
 } face_t;
 
 typedef struct triangle_t
 {
     vec2_t points[3];
+    colour_t colour;
 } triangle_t;
 
 /***********************************************************************************************************************

+ 8 - 5
source/main.c

@@ -62,7 +62,8 @@ void setup()
         goto exit;
     }
 
-    loadOBJFile("assets/f22.obj");
+    //loadOBJFile("assets/cube.obj");
+    loadCubeMeshData();
 
 exit:
     return;
@@ -216,6 +217,8 @@ void update()
             currentTriangle.points[j] = projected;
         }
 
+        currentTriangle.colour = mesh.faces[i].colour;
+
         arrayAdd(projectedTriangles, currentTriangle);
 
     }
@@ -238,25 +241,25 @@ void render()
             drawFilledTriangle(projectedTriangles[i].points[0].x, projectedTriangles[i].points[0].y,
                                projectedTriangles[i].points[1].x, projectedTriangles[i].points[1].y,
                                projectedTriangles[i].points[2].x, projectedTriangles[i].points[2].y,
-                               0xFFFFFFFF);
+                               projectedTriangles[i].colour);
             break;
 
         case DISPLAY_MODE_WIREFRAME:
             drawTriangle(projectedTriangles[i].points[0].x, projectedTriangles[i].points[0].y,
                          projectedTriangles[i].points[1].x, projectedTriangles[i].points[1].y,
                          projectedTriangles[i].points[2].x, projectedTriangles[i].points[2].y,
-                         0xFFFFFFFF);
+                         projectedTriangles[i].colour);
             break;
 
         case DISPLAY_MODE_BOTH:
             drawFilledTriangle(projectedTriangles[i].points[0].x, projectedTriangles[i].points[0].y,
                                projectedTriangles[i].points[1].x, projectedTriangles[i].points[1].y,
                                projectedTriangles[i].points[2].x, projectedTriangles[i].points[2].y,
-                               0xFFFFFFFF);
+                               projectedTriangles[i].colour);
             drawTriangle(projectedTriangles[i].points[0].x, projectedTriangles[i].points[0].y,
                          projectedTriangles[i].points[1].x, projectedTriangles[i].points[1].y,
                          projectedTriangles[i].points[2].x, projectedTriangles[i].points[2].y,
-                         0xFF000000);
+                         0xFF000000 | ~projectedTriangles[i].colour);
             break;
         }
 

+ 16 - 14
source/mesh.c

@@ -13,6 +13,8 @@
 
 #include <log.h>
 #include <array.h>
+#include <display.h>
+#include <triangle.h>
 #include <mesh.h>
 
 #define N_CUBE_VERTICES (8)
@@ -35,23 +37,23 @@ vec3_t cubeVertices[N_CUBE_VERTICES] =
 face_t cubeFaces[N_CUBE_FACES] =
 {
     /* Front */
-    { .a = 1, .b = 2, .c = 3 },
-    { .a = 1, .b = 3, .c = 4 },
+    { .a = 1, .b = 2, .c = 3, .colour = 0xFFFF0000 },
+    { .a = 1, .b = 3, .c = 4, .colour = 0xFFFF0000 },
     /* Right */
-    { .a = 4, .b = 3, .c = 5 },
-    { .a = 4, .b = 5, .c = 6 },
+    { .a = 4, .b = 3, .c = 5, .colour = 0xFF00FF00 },
+    { .a = 4, .b = 5, .c = 6, .colour = 0xFF00FF00 },
     /* Back */
-    { .a = 6, .b = 5, .c = 7 },
-    { .a = 6, .b = 7, .c = 8 },
+    { .a = 6, .b = 5, .c = 7, .colour = 0xFF0000FF },
+    { .a = 6, .b = 7, .c = 8, .colour = 0xFF0000FF },
     /* Left */
-    { .a = 8, .b = 7, .c = 2 },
-    { .a = 8, .b = 2, .c = 1 },
+    { .a = 8, .b = 7, .c = 2, .colour = 0xFFFFFF00 },
+    { .a = 8, .b = 2, .c = 1, .colour = 0xFFFFFF00 },
     /* Top */
-    { .a = 2, .b = 7, .c = 5 },
-    { .a = 2, .b = 5, .c = 3 },
+    { .a = 2, .b = 7, .c = 5, .colour = 0xFFFF00FF },
+    { .a = 2, .b = 5, .c = 3, .colour = 0xFFFF00FF },
     /* Bottom */
-    { .a = 6, .b = 8, .c = 1 },
-    { .a = 6, .b = 1, .c = 4 },
+    { .a = 6, .b = 8, .c = 1, .colour = 0xFF00FFFF },
+    { .a = 6, .b = 1, .c = 4, .colour = 0xFF00FFFF },
 };
 
 mesh_t mesh =
@@ -344,7 +346,7 @@ int objFileLoaderExecuteLine(int argc, char *argv[], uint32_t currentLine)
             objFileLoaderTotalTri++;
             objFileLoaderLoadedFaces++;
 
-            face_t face = { v[1], v[2], v[3] };
+            face_t face = { v[1], v[2], v[3], .colour = MAKE_RGB(255, 0, 0) };
             arrayAdd(mesh.faces, face);
             ret = 0;
         }
@@ -354,7 +356,7 @@ int objFileLoaderExecuteLine(int argc, char *argv[], uint32_t currentLine)
             /* This is not a triangle, so we need to fan it */
             for(i = 2; i < (argc - 1); i++)
             {
-                face_t face = { v[1], v[i], v[i + 1] };
+                face_t face = { v[1], v[i], v[i + 1], .colour = MAKE_RGB(255, 0, 0) };
                 arrayAdd(mesh.faces, face);
 
                 objFileLoaderTotalTri++;