|
@@ -31,7 +31,9 @@ typedef enum displayMode_t
|
|
{
|
|
{
|
|
DISPLAY_MODE_WIREFRAME,
|
|
DISPLAY_MODE_WIREFRAME,
|
|
DISPLAY_MODE_SOLID,
|
|
DISPLAY_MODE_SOLID,
|
|
- DISPLAY_MODE_BOTH,
|
|
|
|
|
|
+ DISPLAY_MODE_SOLID_WIRE,
|
|
|
|
+ DISPLAY_MODE_TEXTURED,
|
|
|
|
+ DISPLAY_MODE_TEXTURED_WIRE,
|
|
} displayMode_t;
|
|
} displayMode_t;
|
|
bool displayVertex = false;
|
|
bool displayVertex = false;
|
|
bool doNotCull = false;
|
|
bool doNotCull = false;
|
|
@@ -73,8 +75,10 @@ void setup()
|
|
globalLight.direction.z = 1;
|
|
globalLight.direction.z = 1;
|
|
vec3Normalize(&globalLight.direction);
|
|
vec3Normalize(&globalLight.direction);
|
|
|
|
|
|
- loadOBJFile("assets/f22.obj");
|
|
|
|
- //loadCubeMeshData();
|
|
|
|
|
|
+ meshTexture = (colour_t *)REDBRICK_TEXTURE;
|
|
|
|
+
|
|
|
|
+ //loadOBJFile("assets/f22.obj");
|
|
|
|
+ loadCubeMeshData();
|
|
|
|
|
|
exit:
|
|
exit:
|
|
return;
|
|
return;
|
|
@@ -114,7 +118,17 @@ void processInput()
|
|
|
|
|
|
case SDLK_4:
|
|
case SDLK_4:
|
|
displayVertex = false;
|
|
displayVertex = false;
|
|
- currentDisplayMode = DISPLAY_MODE_BOTH;
|
|
|
|
|
|
+ currentDisplayMode = DISPLAY_MODE_SOLID_WIRE;
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ case SDLK_5:
|
|
|
|
+ displayVertex = false;
|
|
|
|
+ currentDisplayMode = DISPLAY_MODE_TEXTURED;
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ case SDLK_6:
|
|
|
|
+ displayVertex = false;
|
|
|
|
+ currentDisplayMode = DISPLAY_MODE_TEXTURED_WIRE;
|
|
break;
|
|
break;
|
|
|
|
|
|
case SDLK_c:
|
|
case SDLK_c:
|
|
@@ -157,7 +171,7 @@ void update()
|
|
waitTime = (waitTime + (getMicroSecTime() - ticks) / 1000.) / 2.0;
|
|
waitTime = (waitTime + (getMicroSecTime() - ticks) / 1000.) / 2.0;
|
|
ticks = getMicroSecTime();
|
|
ticks = getMicroSecTime();
|
|
|
|
|
|
- mesh.rotation.x += 0.001;
|
|
|
|
|
|
+ mesh.rotation.x += 0.01;
|
|
mesh.translation.z = 5;
|
|
mesh.translation.z = 5;
|
|
|
|
|
|
worldMatrix = mat4Identity;
|
|
worldMatrix = mat4Identity;
|
|
@@ -173,7 +187,15 @@ void update()
|
|
faceCount = arrayGetSize(mesh.faces);
|
|
faceCount = arrayGetSize(mesh.faces);
|
|
for(i = 0; i < faceCount; i++)
|
|
for(i = 0; i < faceCount; i++)
|
|
{
|
|
{
|
|
- triangle_t currentTriangle;
|
|
|
|
|
|
+ triangle_t currentTriangle =
|
|
|
|
+ {
|
|
|
|
+ .textureCoordinates =
|
|
|
|
+ {
|
|
|
|
+ [0] = { mesh.faces[i].a_uv.u, mesh.faces[i].a_uv.v },
|
|
|
|
+ [1] = { mesh.faces[i].b_uv.u, mesh.faces[i].b_uv.v },
|
|
|
|
+ [2] = { mesh.faces[i].c_uv.u, mesh.faces[i].c_uv.v }
|
|
|
|
+ }
|
|
|
|
+ };
|
|
vec4_t transformedVertices[3];
|
|
vec4_t transformedVertices[3];
|
|
vec3_t triangleNormal;
|
|
vec3_t triangleNormal;
|
|
|
|
|
|
@@ -233,10 +255,10 @@ void update()
|
|
double lightLevel = -vec3Dot(triangleNormal, globalLight.direction);
|
|
double lightLevel = -vec3Dot(triangleNormal, globalLight.direction);
|
|
|
|
|
|
currentTriangle.colour = applyLight(mesh.faces[i].colour, lightLevel);
|
|
currentTriangle.colour = applyLight(mesh.faces[i].colour, lightLevel);
|
|
-
|
|
|
|
currentTriangle.averageDepth = (transformedVertices[0].z +
|
|
currentTriangle.averageDepth = (transformedVertices[0].z +
|
|
transformedVertices[1].z +
|
|
transformedVertices[1].z +
|
|
transformedVertices[2].z) / 3.0;
|
|
transformedVertices[2].z) / 3.0;
|
|
|
|
+ currentTriangle.texture = meshTexture;
|
|
arrayAdd(projectedTriangles, currentTriangle);
|
|
arrayAdd(projectedTriangles, currentTriangle);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -263,28 +285,33 @@ void render()
|
|
switch(currentDisplayMode)
|
|
switch(currentDisplayMode)
|
|
{
|
|
{
|
|
case DISPLAY_MODE_SOLID:
|
|
case DISPLAY_MODE_SOLID:
|
|
|
|
+ case DISPLAY_MODE_SOLID_WIRE:
|
|
drawFilledTriangle(projectedTriangles[i].points[0].x, projectedTriangles[i].points[0].y,
|
|
drawFilledTriangle(projectedTriangles[i].points[0].x, projectedTriangles[i].points[0].y,
|
|
projectedTriangles[i].points[1].x, projectedTriangles[i].points[1].y,
|
|
projectedTriangles[i].points[1].x, projectedTriangles[i].points[1].y,
|
|
projectedTriangles[i].points[2].x, projectedTriangles[i].points[2].y,
|
|
projectedTriangles[i].points[2].x, projectedTriangles[i].points[2].y,
|
|
projectedTriangles[i].colour);
|
|
projectedTriangles[i].colour);
|
|
break;
|
|
break;
|
|
|
|
|
|
|
|
+ case DISPLAY_MODE_TEXTURED:
|
|
|
|
+ case DISPLAY_MODE_TEXTURED_WIRE:
|
|
|
|
+ drawTextureTriangle(&projectedTriangles[i]);
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ default:
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ switch (currentDisplayMode)
|
|
|
|
+ {
|
|
|
|
+ case DISPLAY_MODE_SOLID_WIRE:
|
|
|
|
+ case DISPLAY_MODE_TEXTURED_WIRE:
|
|
case DISPLAY_MODE_WIREFRAME:
|
|
case DISPLAY_MODE_WIREFRAME:
|
|
drawTriangle(projectedTriangles[i].points[0].x, projectedTriangles[i].points[0].y,
|
|
drawTriangle(projectedTriangles[i].points[0].x, projectedTriangles[i].points[0].y,
|
|
projectedTriangles[i].points[1].x, projectedTriangles[i].points[1].y,
|
|
projectedTriangles[i].points[1].x, projectedTriangles[i].points[1].y,
|
|
projectedTriangles[i].points[2].x, projectedTriangles[i].points[2].y,
|
|
projectedTriangles[i].points[2].x, projectedTriangles[i].points[2].y,
|
|
projectedTriangles[i].colour);
|
|
projectedTriangles[i].colour);
|
|
break;
|
|
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,
|
|
|
|
- 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 | ~projectedTriangles[i].colour);
|
|
|
|
|
|
+ default:
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|