From: Matthew Owens Date: Fri, 20 Nov 2020 12:25:01 +0000 (+0000) Subject: added m4_transform_vec X-Git-Url: https://git.owens.tech///git?a=commitdiff_plain;h=refs%2Fheads%2Ffeature%2Fpicking;p=forks%2Fsingle-header-file-c-libs.git added m4_transform_vec --- diff --git a/math_3d.h b/math_3d.h index 05f71af..2a049fc 100644 --- a/math_3d.h +++ b/math_3d.h @@ -210,7 +210,7 @@ static inline mat4_t m4_mul (mat4_t a, mat4_t b); mat4_t m4_invert(mat4_t matrix); vec3_t m4_mul_pos (mat4_t matrix, vec3_t position); vec3_t m4_mul_dir (mat4_t matrix, vec3_t direction); - //TODO: implement m4_transform_vec(mat4_t matrix, vec4_t vec); + vec4_t m4_transform_vec(mat4_t matrix, vec4_t vec); //TODO: ref: https://github.com/LWJGL/lwjgl/blob/2df01dd762e20ca0871edb75daf670ccacc89b60/src/java/org/lwjgl/util/vector/Matrix4f.java void m4_print (mat4_t matrix); @@ -751,4 +751,21 @@ mat4_t m4_invert(mat4_t m) return inv; } +vec4_t m4_transform_vec(mat4_t m, vec4_t v) +{ + vec4_t ret = {0}; + + float x = m.m00 * v.x + m.m10 * v.y + m.m20 * v.z + m.m30 * v.w; + float y = m.m01 * v.x + m.m11 * v.y + m.m21 * v.z + m.m31 * v.w; + float z = m.m02 * v.x + m.m12 * v.y + m.m22 * v.z + m.m32 * v.w; + float w = m.m03 * v.x + m.m13 * v.y + m.m23 * v.z + m.m33 * v.w; + + ret.x = x; + ret.y = y; + ret.z = z; + ret.w = w; + + return ret; +} + #endif // MATH_3D_IMPLEMENTATION