The code you posted essentially lumps all of your rotations about each axis into a single rotation about that axis. As you note, it works well as long as all you're doing is incremental rotations about a single axis. From your update, it also appears that you want the key strokes to apply rotations to the image as displayed, rather than in aggregate as you have coded.
One way to achieve the behavior you're looking for is to store in a queue or resizable vector (std::vector, or std::queue or some other container if you're using C++) each of the rotations that you apply. Each time the user presses a key, add another rotation of the fixed angle size about the desired axis to the list. During playback, apply the rotations in the order they were entered (maybe reverse order, I'll have to give it more thought).
This will then apply the rotations to the displayed geometry, rather than to the canonical (i.e. Un-rotated) geometry.
I did a bit of OpenGL programming in college. It seems like I ran into the same problem, and ended up applying the total sum of each angle each time any given angle was updated.
I cant really gove you an answer,but what I can give you is a way to a solution, that is you have to find the anglde that you relate to or peaks your interest. A good paper is one that people get drawn into because it reaches them ln some way.As for me WW11 to me, I think of the holocaust and the effect it had on the survivors, their families and those who stood by and did nothing until it was too late.