0

実験として、モーターに取り付けられたギアのシミュレートされたセットをセットアップし、それらを OpenGL/GLUT でレンダリングしました。現時点では、Wire ネットワークへの唯一の入力は ですTime。キーボードを使用して、モーターの速度の変更を制御したいと考えています。また、 Fix your Timestep!で説明されているように、物理タイムステップをフレーム レートから切り離したいと思います。.

これは、 3 つの異なるタイプの入力を使用して、 3 つの異なる GLUT コールバック ( keyboardMouseCallbackidleCallback、および) から Wire ネットワークを実行する必要があることを意味します。displayCallbackNetwire を GLUT コールバックと統合する方法がわかりません。

4

2 に答える 2

3

GLUT は、Netwire などのメイン ループを制御する必要があるフレームワークには少し敵対的です。可能ですが、おそらく IORef などを使用する必要があります。私が知っている最も Netwire に適した OpenGL マネージャーは SDL ですが、もちろん、Nicol の GLFW の提案を試してみることもできます。そうしないと、実際に複数のイベント ハンドラからワイヤをステップ実行する必要があります。

実際のキーボード入力を処理するために、使用している基礎となるモナドにイベント情報を追加することをお勧めします (おそらくリーダー モナドが最適なソリューションです)。keyDown次に、たとえば、指定されたキーが押されるたびに生成されるワイヤーを実装します。

keyDown :: (Monoid e) => Key -> Wire e (Reader GuiState) a a

これで、次のような簡単なことを実行できます。

position = integral_ 0 . speed
    where
    direction key dir = dir . keyDown key <|> 0
    speed = direction Right 1 + direction Left (-1)
于 2012-11-17T04:01:02.917 に答える
1

考えたことはありますか...そうしないのですか?

(Free)GLUT を使用しなければならないという法律はありません。GLFW は (ほぼ) 同等の機能を備えており、必要に応じてレンダリング ループを制御できます。これはポーリング ベースの API であるため、必要なときにのみコールバックが発生します。

于 2012-11-17T02:01:17.340 に答える