我希望能够使用OpenGL来创建视频输出文件,而不是通常显示在屏幕上的输出。我在想,不使用glutPostRedisplay()或(SFML版本,这是类似这样的:)window.Display(),并以某种方式使用glReadPixels()代替。
glReadPixels将像素内容放入内存中的数组中(您可能已经知道),但是我如何将其转换为帧,并将几个帧串在一起在视频文件中?视频文件的格式是什么,这样我才能播放?
我应该解释一下为什么我想这样做:很多物理模拟可能需要很长时间来计算足够的信息来显示一帧,所以最好让它运行一夜,第二天早上播放视频文件。你肯定不想每隔5分钟就回来看看发生了什么。
glutPostRedisplay
是GLUT的一部分,而不是特定于OpenGL的东西。
您通常使用PBuffer或使用隐藏窗口和framebuffer对象进行屏幕外渲染。
将图像转换为视频可以通过多种方式完成。例如,您可以利用FFmpeg,使用image2pipe
作为输入格式,并将原始图像数据写入FFmpeg处理标准输入。一个更简单的方案是将每一帧转储到一个单独的图像文件中。使用libpng很简单。然后,您可以将单个图像合并到视频中。
然而,当进行物理模拟时,你不应该将最终渲染转储到文件中。相反,您应该存储模拟数据以供以后回放,因为这样您就可以调整呈现参数,而不必重新模拟所有内容。你将不得不对渲染器进行调整!