2

通常の画面出力の表示ではなく、OpenGL を使用してビデオ出力ファイルを作成できるようにしたいと考えています。私は glutPostRedisplay() または (SFML バージョン、このようなものです:) window.Display() を使用せず、代わりに glReadPixels() を使用することで考えています。

glReadPixels は、ピクセル コンテンツをメモリ内の配列に配置しますが (既にご存知かもしれません)、それをフレームに変換し、複数のフレームをビデオ ファイルにまとめるにはどうすればよいでしょうか? また、再生できるように、ビデオファイルはどのような形式になりますか?

これを行う理由を説明する必要があります。多くの物理シミュレーションでは、1 フレームを表示するのに十分な情報を計算するのに非常に長い時間がかかることがあるため、一晩実行したままにして、翌朝ビデオ ファイルを再生することをお勧めします。何が起こったのかを確認するために 5 分ごとに戻ってくる必要はありません。

4

1 に答える 1

4

glutPostRedisplayGLUT の一部であり、OpenGL に固有のものではありません。

通常、PBuffer を使用するか、非表示のウィンドウとフレームバッファ オブジェクトを使用してオフスクリーン レンダリングを行います。

画像をビデオに変換するには、さまざまな方法があります。たとえば、入力形式として使用してFFmpegimage2pipeを利用し、生の画像データを ffmpeg プロセスの標準入力に書き込むことができます。はるかに簡単な方法は、各フレームを個別の画像ファイルにダンプすることです。libpngの使用は簡単です。その後、個々の画像をビデオに結合できます。

ただし、物理シミュレーションを行うときは、最終的なレンダリングをファイルにダンプしないでください。代わりに、後で再生するためにシミュレーション データを保存する必要があります。これは、すべてを再シミュレーションすることなくレンダリング パラメータを調整できるためです。そして、レンダラーを調整する必要があります!

于 2012-12-27T19:14:40.273 に答える