Moving the angle back and forth in a loop in the idle function doesn't do anything. Think of the rendered frames as a sequence of time slices of your scene. What you have to do is to compute the difference in movement for each frame and update the translations and rotations just a bit at the beginning of every frame. The simplest solution would probably be to use the angle as a function of time from the article, calculating the angular freqency ahead and simply using accumulated time to calcualate the angle at the start of every frame.