2011-10-03 490 views
2

我有一个OpenGL游戏,我想将屏幕上显示的内容保存到视频中。
我该怎么做?有没有图书馆或如何做?
我不在乎压缩,我需要最有效的方式,所以希望FPS不会掉落。将OpenGL渲染保存为视频

编辑:
它的OpenGL 1.1和它的工作在Mac OSX上,虽然我需要它是便于携带。

+0

可能重复[caputre OpenGL窗口在X11与快速framerate - 可能吗?](http://stackoverflow.com/questions/7615474/caputre- opengl-window-in-x11-with-fast-framerate-possible) – genpfault

+0

这里的目标是哪个平台?解决方案可能会因此而有所不同。 –

+0

现在正在使用OSX,但由于所有代码都相当便携,所以解决方案也应该如此。 – Damian

回答

5

绝对有很棒的视频捕捉软件可以用来捕捉屏幕,即使在运行全屏OpenGL游戏时也是如此。

如果您正在使用新版本的OpenGL,正如genpfault所提到的,您可以使用PBO。如果您使用的是旧版的OpenGL(1.x版本),这里是你如何捕获屏幕:

glFinish(); // Make sure everything is drawn 
glReadBuffer(GL_FRONT); 
glPixelStorei(GL_PACK_ALIGNMENT, 4); 
glPixelStorei(GL_PACK_ROW_LENGTH, 0); 
glPixelStorei(GL_PACK_SKIP_ROWS, 0); 
glPixelStorei(GL_PACK_SKIP_PIXELS, 0); 
glReadPixels(blx, bly, w, h, mode, GL_UNSIGNED_BYTE, GL_BGRA); 

其中blxbly是要捕捉屏幕部分的左下角坐标(在你的案例(0, 0))和wh是要捕获的盒子的宽度和高度。有关更多信息,请参阅glReadPixels的参考资料,例如最后一个参数。

将捕获的屏幕(以您想要的速率,例如24 fps)写入视频文件是选择所需文件格式(例如原始视频)的简单方法,写入视频的标题并写入图像(如果原始图像,或在其他格式的图像差异等)

+0

我试过屏幕截图软件,但我得到帧丢失,并且事件如果游戏不冻结几秒钟,视频会。我需要以60fps捕捉。如果我可以直接从游戏中保存视频,那么我可以将游戏更新增量时间固定为1/60秒,即使有冻结,视频也会看起来很流畅。 – Damian

+0

这是OpenGL 1.1,因为这款游戏也适用于Mac和iPhone,所以我猜PBO不是一种选择,对吧? – Damian

+0

60fps的视频看起来像是矫枉过正,但这是您的选择。您可以在1/60秒处固定帧率,但可以捕获每一帧(因此在交替帧中捕捉)。我不记得我在以前的电脑上使用过哪些捕捉软件,但是我捕捉到了一个星际争霸II游戏,它非常完美(没有冻结没有帧丢弃)。当然,你的游戏比星际争霸II更便宜!您只需要搜索我搜索的更好的软件 – Shahbaz