A scene graph, from what I understand, is most of the time just a good old tree with a hierarchy of nodes. The nodes have local transforms relative to a parent, so their position, orientation (and scale!) in the world is defined by those of the parents, recursively up to the root node.
So this scene here is just a simple showcase of all teapots being created as children of the rotating human in the scene hierarchy. Their position rotates around the human, and their vertices rotate around their own local y axes as well.
Performance kinda tanks, though, because I'm doing the matrix multiplications in a real trivial and silly way: instead of going from the root down and accumulating parent matrices in some kind of recursion, I'm just getting all the drawables (objects in the EnTT registry that have a SceneNode, a Transform, a Mesh pointer, and a Texture pointer) and, for each of them, doing a while loop where I go up the parents up to the scene root, and just multiplying an accumulated matrix starting with the drawable's model matrix with each parent's local matrix. Then, when drawing, I pass the accumulated "world matrix" as the model matrix to the shader.
But alas, it works for now :^))))))
I want to focus on implementing other graphics-related stuff and get back to it as soon as possible.