From f30e31df30fef4984bf13f4f7dc36fce6b464a53 Mon Sep 17 00:00:00 2001 From: havoc Date: Fri, 7 Mar 2003 09:23:33 +0000 Subject: [PATCH] added Matrix4x4_OriginFromMatrix, and Matrix4x4_ScaleFromMatrix git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@2804 d7cf8633-e32d-0410-b094-e92efae38249 --- matrixlib.c | 13 +++++++++++++ matrixlib.h | 5 +++++ 2 files changed, 18 insertions(+) diff --git a/matrixlib.c b/matrixlib.c index 5d4279bf..4fa58d79 100644 --- a/matrixlib.c +++ b/matrixlib.c @@ -421,3 +421,16 @@ void Matrix4x4_ConcatScale3 (matrix4x4_t *out, float x, float y, float z) Matrix4x4_Concat(out, &base, &temp); } +void Matrix4x4_OriginFromMatrix (const matrix4x4_t *in, float *out) +{ + out[0] = in->m[0][3]; + out[1] = in->m[1][3]; + out[2] = in->m[2][3]; +} + +float Matrix4x4_ScaleFromMatrix (const matrix4x4_t *in) +{ + // we only support uniform scaling, so assume the first row is enough + return sqrt(in->m[0][0] * in->m[0][0] + in->m[0][1] * in->m[0][1] + in->m[0][2] * in->m[0][2]); +} + diff --git a/matrixlib.h b/matrixlib.h index e6d817ba..87b09f84 100644 --- a/matrixlib.h +++ b/matrixlib.h @@ -85,4 +85,9 @@ void Matrix4x4_ConcatScale (matrix4x4_t *out, float x); // immediately applies a Scale3 to the matrix void Matrix4x4_ConcatScale3 (matrix4x4_t *out, float x, float y, float z); +// extracts origin vector (translate) from matrix +void Matrix4x4_OriginFromMatrix (const matrix4x4_t *in, float *out); +// extracts scaling factor from matrix (only works for uniform scaling) +float Matrix4x4_ScaleFromMatrix (const matrix4x4_t *in); + #endif -- 2.39.2