1.OpenGL is a graphics API that allows you to draw 3D graphics within a C program. It provides a set of basic tools that you can use to manipulate objects and draw them. The inclusion of the ‘glut.h’ header file and library, allows you to control input devices such as mice, keyboards, joypads etc.

Because openGL is a set of very low level functions and tools. With their use and mainly C code you can construct higher level tools. ie, object loaders, texture loaders etc. OpenGL doesn’t have support for these things by default, mainly because input devices can change, file formats can change and be updated. It is up to the programmer to create their own set of tools therefore.

2.At the simplest level, OpenGL uses matrices to rotate, scale and translate objects. If you remember back to your maths lessons at school, matrices can be multiplied together to give a combined effect. (eg, scaling and rotating with one matrix) The order in which these matrices are multiplied is non-commutitive, ie, translate*scale != scale*translate.

The stack stores these combined matrices and the vertex data, normals etc. The vertices are then multiplied by the matrices. A stack is a first in last out data structure. This is why when using openGL, the commands are written back to front.

so,

glTranslated(x,y,z);

glScalef(sx,sy,sz);

glutWireCube(0.1);

would actually be read so that, the cube would be drawn first, then it would be scaled and then it would be translated.