From 88222b1d83f1a8086ab11030bb0aa73cb5d00ad3 Mon Sep 17 00:00:00 2001 From: luboslenco Date: Tue, 2 Jun 2026 12:35:05 +0200 Subject: [PATCH] base: add mat4_tween --- base/sources/iron_math.c | 9 +++++++++ base/sources/iron_math.h | 1 + 2 files changed, 10 insertions(+) diff --git a/base/sources/iron_math.c b/base/sources/iron_math.c index 3e816217..8f011d5b 100644 --- a/base/sources/iron_math.c +++ b/base/sources/iron_math.c @@ -601,6 +601,15 @@ mat4_t mat4_compose(vec4_t loc, quat_t rot, vec4_t scl) { return m; } +mat4_t mat4_tween(mat4_t a, mat4_t b, float t) { + mat4_decomposed_t *da = mat4_decompose(a); + mat4_decomposed_t *db = mat4_decompose(b); + vec4_t loc = {da->loc.x + t * (db->loc.x - da->loc.x), da->loc.y + t * (db->loc.y - da->loc.y), da->loc.z + t * (db->loc.z - da->loc.z), 1.0f}; + vec4_t scl = {da->scl.x + t * (db->scl.x - da->scl.x), da->scl.y + t * (db->scl.y - da->scl.y), da->scl.z + t * (db->scl.z - da->scl.z), 1.0f}; + quat_t rot = quat_slerp(da->rot, db->rot, t); + return mat4_compose(loc, rot, scl); +} + mat4_decomposed_t *mat4_decompose(mat4_t m) { vec4_t loc; quat_t rot; diff --git a/base/sources/iron_math.h b/base/sources/iron_math.h index b8238685..c5a1729c 100644 --- a/base/sources/iron_math.h +++ b/base/sources/iron_math.h @@ -144,6 +144,7 @@ mat4_t mat4_persp(float fov_y, float aspect, float zn, float zf); mat4_t mat4_ortho(float left, float right, float bottom, float top, float znear, float zfar); mat4_t mat4_rot_z(float alpha); mat4_t mat4_compose(vec4_t loc, quat_t rot, vec4_t scl); +mat4_t mat4_tween(mat4_t a, mat4_t b, float t); mat4_decomposed_t *mat4_decompose(mat4_t m); mat4_t mat4_set_loc(mat4_t m, vec4_t v); mat4_t mat4_from_quat(quat_t q);