|
@@ -27,7 +27,7 @@ vec3_t cameraPosition =
|
|
|
{
|
|
|
.x = 0,
|
|
|
.y = 0,
|
|
|
- .z = -5,
|
|
|
+ .z = 0,
|
|
|
};
|
|
|
|
|
|
triangle_t *projectedTriangles = NULL;
|
|
@@ -52,7 +52,7 @@ void setup()
|
|
|
}
|
|
|
|
|
|
//loadCubeMeshData();
|
|
|
- loadOBJFile("assets/f22.obj");
|
|
|
+ loadOBJFile("assets/cube.obj");
|
|
|
|
|
|
exit:
|
|
|
return;
|
|
@@ -113,8 +113,8 @@ void update()
|
|
|
previousFrameTime = SDL_GetTicks();
|
|
|
|
|
|
mesh.rotation.x += 0.01;
|
|
|
- //mesh.rotation.y += 0.01;
|
|
|
- //mesh.rotation.z += 0.01;
|
|
|
+ mesh.rotation.y += 0.01;
|
|
|
+ mesh.rotation.z += 0.02;
|
|
|
|
|
|
arrayEmpty(projectedTriangles);
|
|
|
|
|
@@ -123,6 +123,8 @@ void update()
|
|
|
for(i = 0; i < faceCount; i++)
|
|
|
{
|
|
|
triangle_t currentTriangle;
|
|
|
+ vec3_t transformed[3];
|
|
|
+
|
|
|
vec3_t vertices[3] =
|
|
|
{
|
|
|
mesh.vertices[mesh.faces[i].a - 1],
|
|
@@ -132,23 +134,41 @@ void update()
|
|
|
|
|
|
for(j = 0; j < 3; j++)
|
|
|
{
|
|
|
- vec3_t transformed = vertices[j];
|
|
|
+ transformed[j] = vertices[j];
|
|
|
+
|
|
|
+ transformed[j] = vec3RotateX(transformed[j], mesh.rotation.x);
|
|
|
+ transformed[j] = vec3RotateY(transformed[j], mesh.rotation.y);
|
|
|
+ transformed[j] = vec3RotateZ(transformed[j], mesh.rotation.z);
|
|
|
+
|
|
|
+ transformed[j].z += 5;
|
|
|
+ }
|
|
|
+
|
|
|
+ vec3_t vectorBA = vec3SubVectors(transformed[1], transformed[0]);
|
|
|
+ vec3_t vectorCA = vec3SubVectors(transformed[2], transformed[0]);
|
|
|
|
|
|
- transformed = vec3RotateX(transformed, mesh.rotation.x);
|
|
|
- transformed = vec3RotateY(transformed, mesh.rotation.y);
|
|
|
- transformed = vec3RotateZ(transformed, mesh.rotation.z);
|
|
|
+ vec3_t triangleNormal = vec3Cross(vectorBA, vectorCA);
|
|
|
+ vec3_t cameraRay = vec3SubVectors(cameraPosition, transformed[0]);
|
|
|
|
|
|
- transformed.z -= cameraPosition.z;
|
|
|
+ double cameraDotTriangle = vec3Dot(triangleNormal, cameraRay);
|
|
|
|
|
|
- vec2_t projected = perspectivePointProjection(transformed);
|
|
|
|
|
|
- projected.x += (windowWidth / 2);
|
|
|
+ if (cameraDotTriangle < 0)
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (j = 0 ; j < 3 ; j++)
|
|
|
+ {
|
|
|
+ vec2_t projected = perspectivePointProjection(transformed[j]);
|
|
|
+
|
|
|
+ projected.x += (windowWidth / 2);
|
|
|
projected.y += (windowHeight / 2);
|
|
|
|
|
|
currentTriangle.points[j] = projected;
|
|
|
}
|
|
|
|
|
|
arrayAdd(projectedTriangles, currentTriangle);
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
|