vec3.c (660B)
1 #include <math.h> 2 #include "engine.h" 3 4 vec3 vec3_make(float x, float y, float z) { 5 vec3 v = {x, y, z}; 6 return v; 7 } 8 9 vec3 vec3_sub(vec3 a, vec3 b) { 10 return vec3_make(a.x - b.x, a.y - b.y, a.z - b.z); 11 } 12 13 vec3 vec3_scale(vec3 a, float s) { 14 return vec3_make(a.x * s, a.y * s, a.z * s); 15 } 16 17 float vec3_dot(vec3 a, vec3 b) { 18 return a.x * b.x + a.y * b.y + a.z * b.z; 19 } 20 21 vec3 vec3_cross(vec3 a, vec3 b) { 22 return vec3_make(a.y * b.z - a.z * b.y, 23 a.z * b.x - a.x * b.z, 24 a.x * b.y - a.y * b.x); 25 } 26 27 vec3 vec3_norm(vec3 a) { 28 float l = sqrtf(vec3_dot(a, a)); 29 if (l < 1e-6f) return vec3_make(0, 0, 0); 30 return vec3_scale(a, 1.0f / l); 31 } 32