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

How can I control frame rate in Qt 3D?

本文关键字:控制 控制帧 帧速率 3D Qt      更新时间:2023-10-16

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

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

编辑:我设法找到并将QRenderSettings::OnDemand应用于我的根节点和框架图,但它似乎没有效果,尽管这意味着它应该,因为我正在使用Qt 5.7。非常欢迎对此提出任何额外的意见(即使它只值得评论)。

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

关于这个问题的最新讨论可能是 2018 年来自 qt-project.org 的邮件列表中的一条消息:

Qt3D 依赖于您的 GPU 垂直同步设置。要达到最大数量FPS,只需在驱动程序设置中禁用垂直同步即可。如果另一方面您想降低 FPS,setSwapInterval请在 QSurfaceFormat::defaultFormat并在启动Qt3D之前进行设置应用程序与QSurfaceFormat::setDefaultFormat .

几年前,同一用户似乎在KDAB的网站上回答了类似的问题。

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