3

したがって、この種のトピックは、他の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();
        }
}

これが意味をなさない場合は申し訳ありませんが、意味がない場合は、より適切な言い換えを試みます。

4

1 に答える 1

5

私が正しく理解していれば、問題は、キーボードイベントのオブジェクト位置を変更し、そのイベント処理の後に表示を要求することです。

スムーズなアニメーションを作成するには、キーボードイベント処理でオブジェクトの最終位置を保存してから、レンダリング中に中間オブジェクト位置を補間する必要があります。補間関数の導関数は、アニメーションの速度を示します。

これは、イベント処理が別のスレッドで実行される場合にうまく機能するため、イベント処理はレンダリング操作を(少なくともいくつかの同期操作では)ブロックしません。

于 2010-05-11T05:54:05.223 に答える