|
@@ -16,6 +16,7 @@
|
|
|
#include <log.h>
|
|
|
|
|
|
#include <array.h>
|
|
|
+#include <matrix.h>
|
|
|
#include <triangle.h>
|
|
|
#include <display.h>
|
|
|
#include <vector.h>
|
|
@@ -149,6 +150,7 @@ void update()
|
|
|
uint32_t i, j;
|
|
|
uint32_t faceCount;
|
|
|
uint32_t timeToWait = FRAME_TARGET_TIME - (SDL_GetTicks() - previousFrameTime);
|
|
|
+ matrix4_t scaleMatrix;
|
|
|
if (timeToWait <= FRAME_TARGET_TIME)
|
|
|
{
|
|
|
SDL_Delay(timeToWait);
|
|
@@ -159,14 +161,18 @@ void update()
|
|
|
mesh.rotation.y += 0.01;
|
|
|
mesh.rotation.z += 0.02;
|
|
|
|
|
|
+ mesh.scale.x += 0.002;
|
|
|
+ mesh.scale.x += 0.001;
|
|
|
+
|
|
|
+ scaleMatrix = mat4Scale(mesh.scale.x, mesh.scale.y, mesh.scale.z);
|
|
|
+
|
|
|
arrayEmpty(projectedTriangles);
|
|
|
|
|
|
faceCount = arrayGetSize(mesh.faces);
|
|
|
-
|
|
|
for(i = 0; i < faceCount; i++)
|
|
|
{
|
|
|
triangle_t currentTriangle;
|
|
|
- vec3_t transformedVertices[3];
|
|
|
+ vec4_t transformedVertices[3];
|
|
|
|
|
|
vec3_t vertices[3] =
|
|
|
{
|
|
@@ -177,25 +183,23 @@ void update()
|
|
|
|
|
|
for(j = 0; j < 3; j++)
|
|
|
{
|
|
|
- transformedVertices[j] = vertices[j];
|
|
|
+ transformedVertices[j] = vec4FromVec3(vertices[j]);
|
|
|
|
|
|
- transformedVertices[j] = vec3RotateX(transformedVertices[j], mesh.rotation.x);
|
|
|
- transformedVertices[j] = vec3RotateY(transformedVertices[j], mesh.rotation.y);
|
|
|
- transformedVertices[j] = vec3RotateZ(transformedVertices[j], mesh.rotation.z);
|
|
|
+ transformedVertices[j] = mat4ProdVec4(scaleMatrix, transformedVertices[j]);
|
|
|
|
|
|
transformedVertices[j].z += 5;
|
|
|
}
|
|
|
|
|
|
if (!doNotCull)
|
|
|
{
|
|
|
- vec3_t vectorBA = vec3SubVectors(transformedVertices[1], transformedVertices[0]);
|
|
|
- vec3_t vectorCA = vec3SubVectors(transformedVertices[2], transformedVertices[0]);
|
|
|
+ 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, transformedVertices[0]);
|
|
|
+ vec3_t cameraRay = vec3SubVectors(cameraPosition, vec3FromVec4(transformedVertices[0]));
|
|
|
vec3Normalize(&cameraRay);
|
|
|
|
|
|
double cameraDotTriangle = vec3Dot(triangleNormal, cameraRay);
|
|
@@ -209,7 +213,7 @@ void update()
|
|
|
|
|
|
for (j = 0 ; j < 3 ; j++)
|
|
|
{
|
|
|
- vec2_t projected = perspectivePointProjection(transformedVertices[j]);
|
|
|
+ vec2_t projected = perspectivePointProjection(vec3FromVec4(transformedVertices[j]));
|
|
|
|
|
|
projected.x += (windowWidth / 2);
|
|
|
projected.y += (windowHeight / 2);
|