Browse Source

Lesson 12.11

Godzil 3 years ago
parent
commit
3e6880c4b1
3 changed files with 19 additions and 2 deletions
  1. 2 1
      source/include/vector.h
  2. 5 1
      source/main.c
  3. 12 0
      source/vector.c

+ 2 - 1
source/include/vector.h

@@ -39,6 +39,7 @@ vec2_t vec2SubVectors(vec2_t a, vec2_t b);
 vec2_t vec2ScalarMult(vec2_t a, double s);
 vec2_t vec2ScalarDiv(vec2_t a, double s);
 double vec2Dot(vec2_t a, vec2_t b);
+void vec2Normalize(vec2_t *a);
 
 /* ---------------------------------------------- 3D Vectors operations --------------------------------------------- */
 double vec3Getlength(vec3_t v);
@@ -48,7 +49,7 @@ vec3_t vec3ScalarMult(vec3_t a, double s);
 vec3_t vec3ScalarDiv(vec3_t a, double s);
 vec3_t vec3Cross(vec3_t a, vec3_t b);
 double vec3Dot(vec3_t a, vec3_t b);
-
+void vec3Normalize(vec3_t *a);
 
 vec3_t vec3RotateX(vec3_t original, double angle);
 vec3_t vec3RotateY(vec3_t original, double angle);

+ 5 - 1
source/main.c

@@ -145,9 +145,13 @@ void update()
 
         vec3_t vectorBA = vec3SubVectors(transformed[1], transformed[0]);
         vec3_t vectorCA = vec3SubVectors(transformed[2], transformed[0]);
-
+        vec3Normalize(&vectorBA);
+        vec3Normalize(&vectorCA);
         vec3_t triangleNormal = vec3Cross(vectorBA, vectorCA);
+        vec3Normalize(&triangleNormal);
+
         vec3_t cameraRay = vec3SubVectors(cameraPosition, transformed[0]);
+        vec3Normalize(&cameraRay);
 
         double cameraDotTriangle = vec3Dot(triangleNormal, cameraRay);
 

+ 12 - 0
source/vector.c

@@ -45,6 +45,12 @@ double vec2Dot(vec2_t a, vec2_t b)
     return a.x * b.x + a.y * b.y;
 }
 
+void vec2Normalize(vec2_t *a)
+{
+    double length = vec2Getlength(*a);
+    *a = vec2ScalarDiv(*a, length);
+}
+
 /* ---------------------------------------------- 3D Vectors operations --------------------------------------------- */
 double vec3Getlength(vec3_t v)
 {
@@ -91,6 +97,12 @@ double vec3Dot(vec3_t a, vec3_t b)
     return a.x * b.x + a.y * b.y + a.z * b.z;
 }
 
+void vec3Normalize(vec3_t *a)
+{
+    double length = vec3Getlength(*a);
+    *a = vec3ScalarDiv(*a, length);
+}
+
 vec3_t vec3RotateX(vec3_t original, double angle)
 {
     vec3_t ret = {