矢印キーで画面上を移動できる小さな文字のOpenGLプログラムがあります。方向を変えると、キャラクターはそれに応じて向きを変えます。基本的には次のようになります。
//Pressing the up arrow to go in the up direction
if(prevSwimDirection == RIGHT)
swimAngle = 90;
...
glutPostRedisplay();
泳ぐ方向は、コードの他の場所の表示機能で処理されます。
if(changesMode == SWIM_AROUND)
glRotatef((GLfloat)swimAngle, 0.0, 0.0, 1.0);
もちろん、これは瞬間的な突然の方向転換を引き起こします。私はこれらをこのように滑らかにしようとしましたが、運がありませんでした:
if(prevSwimDirection == RIGHT)
for(double i = swimAngle; i < 90; i += 0.00001){
swimAngle = i;
glutPostRedisplay();
}
さまざまな値でiをインクリメントしようとしましたが、ループ全体でglutPostRedisplay()を呼び出しているにもかかわらず、再表示の前に計算が実行されているように見えることに最終的に気付きました。言い換えれば、それでも突然方向を変えますが、わずかな初期遅延があります。
これを適切に(または、より良い方法で、効率的に)機能させる方法はありますか?