1. In order to complete this assignment you'll have to understand the STTransform class. Describe libST's representation of a transform and compare it's flexibility to an alternative representation, such as the 4x4 matrix representation Pat discussed in class. For example, can you name a type of transformation that STTransform cannot represent. Describe the order that the STSceneNode class performs the various rotate/scale/translate transforms when drawing the scene (ie. what is the first operation performed on the shapes vertices? what is the second? third?). Are there other orderings that would produce the same result?

An STTransform is convenient not only because many transformations can be stacked up on a node but also because specific portions of the transformation can be swapped out and changed without trying to undo it in a matrix. However, some operations, like a shear, are not easily represented. The library scales first, rotates second, translates last. Rotation happens before the translation as can be seen in the operation of the clock and some empirical testing with objects. Scaling, similarly, happens before, not affecting translations. Scale and rotate can be swapped to do the same thing.

2. Note that graphical objects, such as instances of the STImage and STShape class are not scene graph nodes (but they can be contained within STSceneNodes). By inspecting the implementation of STSceneNode, determine if it permissable to add the same object to the scene multiple times (Eg. Can multiple scene nodes contain the same shape object)? Why would one want to do this?

This is possible because the node only contains pointers to the drawables and does not own them. This allows for multiple instances or reflections of the same object to exist in multiple places with different translations.

3. Assume you had an STSceneNode n, and a STShape s. How would you add this shape as the first child node of n? How would you add it as the last child node of n?

first child: n.PlaceObject(NULL); last child: n.PlaceObject(m.GetLastChild());

4. The STImage::read() method doesn't read data off disk, it reads it from the OpenGL framebuffer. The method takes 4 integer arguments. Describe the meaning of these arguments. You will call this method as part of the required code for this assignment. How are the values you pass to STImage::read() determined in clock.cpp?

0,0 is my origin of the viewport and the windowsize variables passed in are set during the reshape function. This guarantees that the view in the window is the image saved.