Objects of revolution are objects which are symmetrical about an axis.
This is what I’m trying to say:
When you don’t load identity, the first frame becomes:
glRotatef((float)xmouseDelta1 , 0.0f, 1.0f, 0.0f);
glRotatef((float)ymouseDelta1 , 1.0f, 0.0f, 0.0f);
For the second frame, the modelview matrix is equivalent to calling the next piece of code in the first frame:
glRotatef((float)xmouseDelta1 , 0.0f, 1.0f, 0.0f);
glRotatef((float)ymouseDelta1 , 1.0f, 0.0f, 0.0f);
glRotatef((float)xmouseDelta2 , 0.0f, 1.0f, 0.0f);
glRotatef((float)ymouseDelta2 , 1.0f, 0.0f, 0.0f);
This is not equivalent to loading the identity matrix and calling:
glRotatef((float)(xmouseDelta1+xmouseDelta2) , 0.0f, 1.0f, 0.0f);
glRotatef((float)(ymouseDelta1+ymouseDelta2) , 1.0f, 0.0f, 0.0f);
because the latter is equivalent to:
glRotatef((float)xmouseDelta1 , 0.0f, 1.0f, 0.0f);
glRotatef((float)xmouseDelta2 , 0.0f, 1.0f, 0.0f);
glRotatef((float)ymouseDelta1 , 1.0f, 0.0f, 0.0f);
glRotatef((float)ymouseDelta2 , 1.0f, 0.0f, 0.0f);
and the second and third rotation matrices can not be interchanged.
Nico