+static void create_object(aiNode *node, Mat4 parent_transform, Scene *scene, const aiScene *ascene)
+{
+ /* Note:
+ The 99% of the scenes have 1 mesh per node => for simplicity we only check the 1st one.
+ Also: the 3D models we are going to use for this demo, have flat structure (no hierarchy)
+ but just in case we need to replace them later, we calculate the transform by assuming that we
+ have a node hierarchy. This => that each object's modelling transformation is the
+ product of its local transformation (mTransformation) with the acc parent nodes transformations
+ (parent_transform)
+ */
+ Mat4 modelling_transform = parent_transform * aiMatrix2Mat(node->mTransformation);
+
+ if(node->mNumMeshes > 0) {
+ Object *object = new Object;
+
+ // get the mesh index from node
+ int mesh_idx = node->mMeshes[0];
+ object->mesh = scene->meshes[mesh_idx];
+
+ // get the material index from the mesh that is assigned to this node
+ aiMesh *amesh = ascene->mMeshes[mesh_idx];
+ object->material = scene->materials[amesh->mMaterialIndex];
+
+ // set the object's transformation
+ object->transform = modelling_transform;
+ scene->objects.push_back(object);
+ }