1

オブジェクトファイルをロードするOpenGLプロジェクトがあります.オブジェクトがロードされた後、キーボードでスムーズに移動できるようにしたいので、このコードブロックを書いて仕事をします:

while (remains) {
    if (x_remains) {
        refPosition[0] += speed.x;
        if (refPosition[0] > nextPos[0]) {
            x_remains = false;
        }
    }
    if (y_remains) {
        refPosition[1] += speed.y;
        if (refPosition[1] > nextPos[1]) {
            y_remains = false;
        }
    }
    if (z_remains) {
        refPosition[2] += speed.z;
        if (refPosition[2] >= nextPos[2]) {
            z_remains = false;
        }
    }

    remains = x_remains || y_remains || z_remains;        
    glutPostRedisplay();
}

ご覧のとおり、その間にシーンを再表示したいのですが、これが実行されると、 glutpostredisplay() がフラグを設定するだけで、メインループの次の繰り返しでシーンが再描画されます。私の質問は、while の次のループの前と関数が戻る前にシーンを再描画する方法です。

4

1 に答える 1

0

直接描画する代わりに glutPostRedisplay を使用することで、パフォーマンスが低下したり、レンダリングがぎくしゃくしたりすることはありません。(または、1 マイクロ秒が本当に貴重である場合、そもそもなぜ GLUT を使用しているのですか?)

一部のシステムでは、GL コンテキストが無効になるため、display 関数の外に描画することはできません。

これもGLUTに限ったことではありません。私がよく知っているすべての最新のグラフィックス/GUI ツールキットでは、WM_PAINT メッセージ、NSView drawRect: など、イベント ハンドラーによって呼び出される表示関数を指定する必要があります。

プログラムがスムーズに更新されない場合、それは別の理由によるものです。

于 2013-05-28T02:28:50.700 に答える