src/scene_node.c

changeset 204
be5cf64b5c29
parent 189
2c063b225183
--- a/src/scene_node.c	Sun Jul 13 14:22:40 2025 +0200
+++ b/src/scene_node.c	Sun Jul 13 15:09:04 2025 +0200
@@ -79,6 +79,24 @@
     }
 }
 
+void asc_scene_node_calculate_transform(AscSceneNode *node) {
+    asc_transform temp, temp2;
+
+    // move the point of origin
+    asc_transform_translate3f(temp, asc_vec3f_neg(node->origin));
+
+    // apply the rotation
+    asc_transform_apply(node->transform, node->rotation, temp);
+
+    // apply the scale
+    asc_transform_scale3f(temp, node->scale);
+    asc_transform_apply(temp2, temp, node->transform);
+
+    // apply the translation
+    asc_transform_translate3f(temp, node->position);
+    asc_transform_apply(node->transform, temp, temp2);
+}
+
 void asc_scene_node_name(AscSceneNode *node, const char *name) {
     cx_strfree(&node->name);
     if (name == NULL) {

mercurial