0

そのため、IMU からセンサー データを読み取り、それに応じて角度を更新しようとしています。センサー データ ファイルを開き、1 行ずつ読み取り、クォータニオンを回転に変換してから、モデルを更新します。問題は、while ループから glutPostRedisplay() を呼び出すと、glutPostRedisplay() が並列で動作している間、ループが継続することです。これにより、すべてが瞬時に行われるように見えます。私がやりたいことは、表示が更新されるまでプログラムを強制的に停止することです。

ファイルを常に開いたり閉じたりしたくない、またはファイル内の現在の場所を追跡したくないため、これを行う別の方法は考えられません。行を読み取って処理し、OpenGL を強制的にレンダリングしてから、次の行を読み取ることができれば簡単です。

誰か提案はありますか?

注:現在、while ループは、レンダリングできるようになるまでに完全に実行されます。glutPostRedisplay() の直後に glutSwapBuffers() を使用してみました

4

2 に答える 2

1

GLUTはそのようには機能しません。GLUTがレンダリングコマンドを発行するには、ループを停止して、必要な関数から戻る必要があります。通常、この種のものはアイドル状態の関数に入れます。

または、レンダリングループの所有権を持つことができるGLFWを使用することもできます。または、FreeGLUTを使用glutMainLoopEventして、レンダリングループの所有権を取得することもできます(ただし、これを機能させるには、コードを少し書き直す必要があります)。

于 2012-04-26T23:19:39.020 に答える
1

while ループを使用する代わりに、GLUT がビジーでないときに呼び出される関数をglutIdleFuncに登録できます。このアイドル関数で IMU から読み取り、再表示を強制する必要がある場合は glutPostRedisplay を呼び出します。

于 2012-04-26T23:30:19.507 に答える