Question 1

The transform omitted by STTransform but possible under a more generalized orthogonal transform is that of skewing, also known as shearing. STTransform performs its transforms in the order: 1) Translate, 2) Rotate, 3) Scale. The order matters, as matrix multiplication is only commutative for diagonal matrices. Thus, as Scaling's matrix of transformation is diagonal, we may place it arbitrarily (as is driven home by the relevant source differing from the comments in STSceneNode.cpp), but the relative precedence between Translate and Rotate must be preserved.

= Question 2 =

Instances of STSceneNode each store their member STDrawable independently from one another, thus there's nothing preventing two STSceneNodes from being used to draw the same model, possibly under different transforms (in fact, it's most likely that they'll be differently transformed, as two identical models drawn untransformed would be on top of each other, and would look like just one). This is useful as it allows us to use the same model data repeatedly in a scene.

= Question 3 =

As the first: n.PlaceObject(NULL, s);

As the last: n.PlaceObject(n.GetLastChild(), s);

= Question 4 =

The four parameters are the bounding box, in pixels, of the region of the OpenGL framebuffer you want to read: the first two mark the origin, and the next two the size. For this assignment, I'll use the entire framebuffer, thus (0, 0, 650, 650) -- the last two parameters are taken from the call to glutInitWindowSize in clock.cpp.