如何在Qt 3D中控制帧速率?

时间:2016-07-13 00:53:26

标签: c++ qt 3d frame-rate qt3d

我使用新的Qt 3D API在计算密集的计算过程中显示3D场景。此场景仅作为对用户输入的响应而更改。但是,Qt 3D的默认行为似乎将场景的帧速率锁定为某个高常量值,在这种情况下会消耗不可接受的资源量。

有没有办法在Qt 3D中控制帧速率?理想情况下,我只想在对场景进行更改时渲染新帧,但将其降低到较小的固定值也足够了。 Qt 3D文档很少,我也找不到办法做这些事情。

编辑:我设法找到并应用QRenderSettings::OnDemand到我的根节点和框架图,但它似乎没有任何效果,虽然this暗示它应该,因为我使用Qt 5.7。关于此的任何其他意见将非常受欢迎(即使它只是保证评论)。

编辑2:安装Fraps并直接测量帧速率后,事实上,场景似乎只是在应用了QRenderSettings :: OnDemand的情况下渲染帧。如果没有这个,帧速率将保持稳定的60fps,这恰好是我的屏幕刷新率。 然而,无论3D窗口是否显示,程序在启用Qt 3D时都会继续消耗大量CPU时间。我开始认为这是一个与帧率无关的独立Qt 3D问题,可能会相应地打开一个新问题。

2 个答案:

答案 0 :(得分:2)

执行此操作的最佳方法可能是在头文件FrameRateRange中使用类<FrameRateRange>。此课程中有两个公共函数:FrameRateRange()FrameRateRange(qreal minimumFrameRate, qreal maximumFrameRate)qreal是后一个函数中两个参数中出现的参数。这是在头文件typedef中声明的全局<QtGlobal>minimummaximum是以每秒帧数为单位的帧速率。来自herehere的更多信息。

答案 1 :(得分:1)

有关此问题的最新讨论可能是来自2018年的mailing list from qt-project.org消息:

Qt3D依赖于您的GPU vsync设置。达到最大数量 FPS,只需在驱动程序设置中禁用vsync。另一方面 您要降低FPS,请致电setSwapInterval QSurfaceFormat::defaultFormat并在启动Qt3D之前进行设置 QSurfaceFormat::setDefaultFormat的应用程序。

同一用户似乎在a similar question on KDAB's website年前已经答复。