--- 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) {