どのようにOpenGLでスムーズな動きを作るには?
-
25-09-2019 - |
質問
だから私の他のOpenGLの質問へのトピックに関するこの種の(ない私のOpenGL ESの質問が、OpenGLのデスクトップバージョン)。あなたが誰かのプレスを持っている場合は、正方形を移動するための鍵は、どのように自然に正方形の動きを作るのですし、あまりびくびくだけでなく、同じ速度で、私は今それを持っていますか?これはglutKeyboardFunc()関数の私のコードです:
void handleKeypress(unsigned char key, int x, int y)
{
if (key == 'w')
{
for (int i = 0; i < 12; i++)
{
if (i == 1 || i == 7 || i == 10 || i == 4)
{
square[i] = square[i] + 1;
}
}
glutPostRedisplay();
}
if (key == 'd')
{
for (int i = 0; i < 12; i++)
{
if (i == 0 || i % 3 == 0)
{
square[i] = square[i] + 1;
}
}
glutPostRedisplay();
}
if (key == 's')
{
for (int i = 0; i < 12; i++)
{
if (i == 1 || i == 7 || i == 10 || i == 4)
{
square[i] = square[i] - 1;
}
}
glutPostRedisplay();
}
if (key == 'a')
{
for (int i = 0; i < 12; i++)
{
if (i == 0 || i % 3 == 0)
{
square[i] = square[i] - 1;
}
}
glutPostRedisplay();
}
}
私はそれが意味を成していない場合は、より良い方法でそれを修正してくださいしようとするでしょう、これは非常に意味がない場合はごめんなさいます。
解決
私が正しく理解していれば、
は、問題は、キーボードイベント上のオブジェクトの位置を変更し、そのイベント処理後の表示を要求していることである。
スムーズなアニメーションを有するためには、キーボードイベント処理におけるオブジェクトの最終位置を記憶し、その後、レンダリング中の中間オブジェクト位置を補間しなければなりません。 補間関数の導出は、アニメーションの速度を与える。
イベント処理は、(少なくともいくつかの同期動作のために)レンダリング操作を妨げないように、イベント処理は、分離されたスレッドで実行される場合、これは良好に動作します。
所属していません StackOverflow