2012-04-26 8 views
0

私はIMUからセンサーデータを読み込み、それに応じて角度を更新しようとしています。私はセンサーデータファイルを開き、行ごとに読み込み、四元数を回転に変換してからモデルを更新します。問題は、whileループからglutPostRedisplay()を呼び出すと、glutPostRedisplay()がパラレルで動作している間にループが継続することです。これにより、すべてが即座に発生するように見えます。私がしたいのは、ディスプレイが更新されるまでプログラムを強制的に停止させることです。OpenGL:ファイルを読み込むwhileループからglutPostRedisplay()を呼び出す

ファイルを常に開いたり閉じたり、ファイルの場所を把握したくないため、これを行う別の方法は考えられません。私はただ行を読んで処理してから、OpenGLにレンダリングを強制して、次の行などを読むのは簡単でしょう。

誰か提案がありますか?

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

+0

なぜ寝るだけではないのですか?ビデオドライバからのブロックに頼っているのは良い考えではありません。 –

答えて

1

GLUTはこのように動作しません。 GLUTがレンダリングコマンドを出すためには、ループを止めて、どんな機能からでも戻る必要があります。一般に、この種のものはアイドル状態のfuncに入れます。

GLFWを使用すると、レンダリングループの所有権を持つことができます。あるいは、フリーループのglutMainLoopEventを使用すると、レンダリングループの所有権を得ることができます(ただし、この作業を行うためにコードを書き直す必要があります)。

+0

私は、ファイルを使用せず、リアルタイムでIMUセンサーを読み取っていませんでした。私がファイルを使用するならば、私はそれを全時間開いたままにして、開いたファイルへのポインタをグローバル変数として保持しなければならないでしょう。そうすれば、私は行の位置を把握して、読み取りと処理の機能を常に思い出すことができます。ありがとう! – slimbo

1

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

関連する問題