#include struct Vec3 { float x, y, z; }; Vec3 create_Vec3 (float x, float y, float z) { Vec3 result = {x, y, z}; return result; } Vec3 Vec3_add (const Vec3& a, const Vec3& b) { Vec3 result = {a.x + b.x, a.y + b.y, a.z + b.z}; return result; } Vec3 Vec3_subtract (const Vec3& a, const Vec3& b) { Vec3 result = {a.x - b.x, a.y - b.y, a.z - b.z}; return result; } Vec3 Vec3_scalar (const Vec3& a, const float scalar) { Vec3 result = {a.x*scalar, a.y*scalar, a.z*scalar}; return result; } float Vec3_dot (const Vec3& a, const Vec3& b) { float result = a.x*b.x + a.y*b.y + a.z*b.z; return result; } Vec3 Vec3_cross (const Vec3& a, const Vec3& b) { Vec3 result = {a.y*b.z - a.z*b.y, a.z*b.x - a.x*b.z, a.x*b.y - a.y*b.x}; return result; } float Vec3_length (const Vec3& a) { float result = sqrt(a.x*a.x + a.y*a.y + a.z*a.z); return result; } Vec3 Vec3_normalize (const Vec3& a) { Vec3 result; float len = sqrt(a.x*a.x + a.y*a.y + a.z*a.z); if (len > 0.0f) { return result = {a.x/len, a.y/len, a.z/len}; } else { return a; } } struct Mat4{ float m4[16]; }; Mat4 Mat4_createMatrix (float InitialValue) { Mat4 result; for (int i = 0; i < 16; i++) { result.m4[i] = {InitialValue}; } return result; } Mat4 Mat4_createZeroes () { Mat4 result = {0}; return result; } Mat4 Mat4_createIdentity () { Mat4 result = {0}; result.m4[0] = 1; result.m4[5] = 1; result.m4[10] = 1; result.m4[15] = 1; return result; } Mat4 Mat4_createTranslation (float x, float y, float z) { Mat4 result = {0}; result.m4[0] = 1; result.m4[5] = 1; result.m4[10] = 1; result.m4[15] = 1; result.m4[12] = x; result.m4[13] = y; result.m4[14] = z; return result; } //translate //rotate //scale //perspective