我使用新的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问题,可能会相应地打开一个新问题。
答案 0 :(得分:2)
执行此操作的最佳方法可能是在头文件FrameRateRange
中使用类<FrameRateRange>
。此课程中有两个公共函数:FrameRateRange()
和FrameRateRange(qreal minimumFrameRate, qreal maximumFrameRate)
。 qreal
是后一个函数中两个参数中出现的参数。这是在头文件typedef
中声明的全局<QtGlobal>
。 minimum
和maximum
是以每秒帧数为单位的帧速率。来自here和here的更多信息。
答案 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年前已经答复。