是否有可能比屏幕刷新率更快地进行GPU加速3D渲染?

时间:2013-01-13 12:20:52

标签: opengl render gpu

  • 是否可以比屏幕刷新率更快地进行GPU加速3D渲染?

  • 可以用OpenGL做到吗?如果是,如果不使用什么工具?

注意

因为我希望渲染比屏幕刷新率更快,所以我不介意没有输出到屏幕。事实上,没有输出窗口将是一个优势。

我将以编程方式(例如通过glReadPixels)使用渲染输出,或者输出到文件作为视频供人类稍后观看。

为什么我要这样做

我想用计算机模拟计算机视觉的机器人。模拟机器人将有一个虚拟相机来观察这个世界,并将根据相机输入采取行动。因此,我希望模拟尽可能快地运行,忽略屏幕刷新率。

2 个答案:

答案 0 :(得分:7)

是的,使用OpenGL肯定是可行的。渲染速率与屏幕刷新率无关(这就是为什么你可以看到以500 FPS等运行的演示)。

对于机制,您可以渲染到屏幕外的帧缓冲区,并将生成的图像读回主存储器。然后,您可以随意处理/分析它。参见:

答案 1 :(得分:1)

使用OpenGL执行此操作时,我只需将glutSwapBuffers回调函数末尾的display替换为glFlush,这样我就可以从60FPS到600FPS简单的场景。

glutSwapBuffers确保显示每个计算的帧,因此在刷新屏幕之前停止程序,此时它将后缓冲区放入前缓冲区,这可以在屏幕上看到。

另一方面,

glFlush仅确保已计算场景并使用新场景更新后备缓冲区(在屏幕上无法看到)。因此,新场景计算仅在呈现新场景之前停止。 glutSwapBuffers来电 在交换缓冲区之前glFlush以确保已经计算了场景。

注意

在我的应用程序中,glReadPixels允许我正确读取像素,即使没有glutSwapBuffers,所以它正在从后备缓冲区读取。

然而,仅仅调用glReadPixels来检索700像素会有很大的性能损失:FPS下降到200FPS。我猜这是因为后备缓冲区必须位于GPU内存的某个位置(请更正/确认),glReadPixels正在执行GPU - > CPU通信,这是非常昂贵的。

这意味着无论渲染计算速度多快,我的应用程序仍然会在200FPS下出现瓶颈,除非我长大并学习如何在GPGPU上进行处理并从那里访问后备缓冲区。