2

我希望能够使用 OpenGL 创建视频输出文件,而不是通常在屏幕输出上显示。我正在考虑不使用 glutPostRedisplay() 或(SFML 版本,就像这样:) window.Display(),而是以某种方式使用 glReadPixels()。

glReadPixels 将像素内容放入内存中的数组中(您可能已经知道),但是如何将其转换为帧,并将多个帧串在一起形成一个视频文件?视频文件的格式是什么,以便我可以播放?

我应该解释一下我为什么要这样做:很多物理模拟可能需要很长时间才能计算出足够的信息来显示一帧,所以最好让它运行一夜,第二天早上播放视频文件。您不会希望每 5 分钟返回一次以查看发生了什么。

4

1 回答 1

4

glutPostRedisplay是 GLUT 的一部分,而不是特定于 OpenGL 的东西。

您通常使用 PBuffer 或使用隐藏窗口和帧缓冲区对象进行屏幕外渲染。

可以通过多种方式将图像转换为视频。例如,您可以使用FFmpeg作为image2pipe输入格式并将原始图像数据写入 ffmpeg 进程标准输入。一个更简单的方案是将每一帧转储到一个单独的图像文件中。使用libpng很简单。然后,您可以将单个图像合并到一个视频中。

但是,在进行物理模拟时,您不应将最终渲染转储到文件中。相反,您应该存储模拟数据以供以后回放,因为您可以调整渲染参数而无需重新模拟所有内容。您将不得不对渲染器进行调整!

于 2012-12-27T19:14:40.273 回答