c++ - 如何使用 OpenGL 确保 Qt 中动画的适当速度?

标签 c++ c qt opengl animation

我每秒要显示 200 帧。框架非常非常简单,黑色和白色,只有几行。计时器正在驱动动画。目标是在大约时回放帧。 200 帧/秒。

在 Linux 下,我将计时器设置为 5 毫秒,并让它显示每一帧(即 200fps)。工作正常,但在 Win 7 下失败。

在 Win 7(同一台机器)下,我必须将计时器设置为 20 毫秒,并让它每 4 帧显示一次(50 fps × 4 = 200)。我通过反复试验找到了这些神奇的数字。

我应该怎么做才能保证(在合理的范围内)动画将在用户的机器上以适当的速度播放?

例如,如果用户的机器只能进行 30 fps 或 60 fps 怎么办?

最佳答案

简短的回答是,你不能(通常)。

为了获得最佳美学效果,大多数窗口系统默认都启用“vsync”,这意味着屏幕重绘以显示器的刷新率进行。在过去的 CRT 时代,您可能可以使用高端显示器获得 75-90 Hz 的帧频,但使用今天的 LCD,您可能会停留在 60 fps。

也就是说,有一些 OpenGL 扩展可以以编程方式禁用 VSync(不要随便记住扩展名称),并且您可以经常在驱动程序级别禁用它。但是,无论您做什么(除非定制硬件),您都无法以 200 fps 的速度显示完整的帧。

现在,不清楚您是否有需要以 200 fps 显示的预渲染图像,或者您是否从头开始渲染并希望达到 200 fps。如果是前者,一个不错的选择可能是使用计时器来确定您应该显示哪一帧(每 60 Hz 更新一次),并使用该值在两个预渲染帧之间进行线性插值。如果是后者,我只使用计时器来控制运动(或场景中的任何动态)并在给定时间渲染适当的场景。更快的硬件或禁用 VSYNC 将在相同的时间内为您提供更多的帧(因此动画更流畅,以撕裂为模)等等。但是无论哪种方式,场景都会以正确的速度展开。

希望对您有所帮助。如果您提供更多关于您的应用程序的信息以及 200 fps 要求的来源,我们可能会为您提供更好的建议。

关于c++ - 如何使用 OpenGL 确保 Qt 中动画的适当速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4800520/

相关文章:

c++ - Microsoft Visual C++ 是否不使用带有 float 的 C/C++ 调用约定?

C++ ...当所有参数都有默认值时

c++ - 关于Qt属性的问题

qt - QML 中的自定义附加属性

c++ - 如何将 Imagemagick 库链接到 Qt(windows)

c++ - operator void*() 转换仍然是 C++ 库的一部分吗?

c++ - 如何从 C++ 中的函数正确返回不可修改的对象引用?

c - 理解一个C程序

c - 如何在c编程中从long转换为float时获得两位小数

java - 整数和的总值不等于计算值