|
@@ -21,6 +21,7 @@
|
|
|
#include <display.h>
|
|
|
#include <vector.h>
|
|
|
#include <mesh.h>
|
|
|
+#include <light.h>
|
|
|
|
|
|
bool isRunning = true;
|
|
|
int previousFrameTime = 0;
|
|
@@ -35,6 +36,8 @@ bool displayVertex = false;
|
|
|
bool doNotCull = false;
|
|
|
enum displayMode_t currentDisplayMode = DISPLAY_MODE_SOLID;
|
|
|
matrix4_t projectionMatrix;
|
|
|
+light_t globalLight;
|
|
|
+
|
|
|
|
|
|
vec3_t cameraPosition =
|
|
|
{
|
|
@@ -64,8 +67,13 @@ void setup()
|
|
|
|
|
|
projectionMatrix = mat4Perspective((double)windowHeight / windowWidth, 90, 0.1, 100);
|
|
|
|
|
|
- //loadOBJFile("assets/cube.obj");
|
|
|
- loadCubeMeshData();
|
|
|
+ globalLight.direction.x = 0;
|
|
|
+ globalLight.direction.y = 0;
|
|
|
+ globalLight.direction.z = 1;
|
|
|
+ vec3Normalize(&globalLight.direction);
|
|
|
+
|
|
|
+ loadOBJFile("assets/f22.obj");
|
|
|
+ //loadCubeMeshData();
|
|
|
|
|
|
exit:
|
|
|
return;
|
|
@@ -136,7 +144,7 @@ void update()
|
|
|
}
|
|
|
previousFrameTime = SDL_GetTicks();
|
|
|
|
|
|
- mesh.rotation.x += 0.01;
|
|
|
+ mesh.rotation.x += 0.001;
|
|
|
mesh.translation.z = 5;
|
|
|
|
|
|
worldMatrix = mat4Identity;
|
|
@@ -154,6 +162,7 @@ void update()
|
|
|
{
|
|
|
triangle_t currentTriangle;
|
|
|
vec4_t transformedVertices[3];
|
|
|
+ vec3_t triangleNormal;
|
|
|
|
|
|
vec3_t vertices[3] =
|
|
|
{
|
|
@@ -169,15 +178,15 @@ void update()
|
|
|
transformedVertices[j] = mat4ProdVec4(worldMatrix, transformedVertices[j]);
|
|
|
}
|
|
|
|
|
|
+ vec3_t vectorBA = vec3SubVectors(vec3FromVec4(transformedVertices[1]), vec3FromVec4(transformedVertices[0]));
|
|
|
+ vec3_t vectorCA = vec3SubVectors(vec3FromVec4(transformedVertices[2]), vec3FromVec4(transformedVertices[0]));
|
|
|
+ vec3Normalize(&vectorBA);
|
|
|
+ vec3Normalize(&vectorCA);
|
|
|
+ triangleNormal = vec3Cross(vectorBA, vectorCA);
|
|
|
+ vec3Normalize(&triangleNormal);
|
|
|
+
|
|
|
if (!doNotCull)
|
|
|
{
|
|
|
- vec3_t vectorBA = vec3SubVectors(vec3FromVec4(transformedVertices[1]), vec3FromVec4(transformedVertices[0]));
|
|
|
- vec3_t vectorCA = vec3SubVectors(vec3FromVec4(transformedVertices[2]), vec3FromVec4(transformedVertices[0]));
|
|
|
- vec3Normalize(&vectorBA);
|
|
|
- vec3Normalize(&vectorCA);
|
|
|
- vec3_t triangleNormal = vec3Cross(vectorBA, vectorCA);
|
|
|
- vec3Normalize(&triangleNormal);
|
|
|
-
|
|
|
vec3_t cameraRay = vec3SubVectors(cameraPosition, vec3FromVec4(transformedVertices[0]));
|
|
|
vec3Normalize(&cameraRay);
|
|
|
|
|
@@ -205,7 +214,10 @@ void update()
|
|
|
currentTriangle.points[j].y = projected.y;
|
|
|
}
|
|
|
|
|
|
- currentTriangle.colour = mesh.faces[i].colour;
|
|
|
+ double lightLevel = -vec3Dot(triangleNormal, globalLight.direction);
|
|
|
+
|
|
|
+ currentTriangle.colour = applyLight(mesh.faces[i].colour, lightLevel);
|
|
|
+
|
|
|
currentTriangle.averageDepth = (transformedVertices[0].z +
|
|
|
transformedVertices[1].z +
|
|
|
transformedVertices[2].z) / 3.0;
|