9

我正在使用新的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 问题,并且可能会相应地提出一个新问题。

4

2 回答 2

1

最近对此的讨论可能是 2018 年来自 qt-project.org 的邮件列表中的一条消息:

Qt3D 依赖于您的 GPU 垂直同步设置。要达到最大 FPS 数,只需在驱动程序设置中禁用 vsync。另一方面,如果您想降低 FPS,请在启动 Qt3D 应用程序之前调用setSwapIntervalQSurfaceFormat::defaultFormat设置它QSurfaceFormat::setDefaultFormat

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

于 2020-11-16T23:26:51.360 回答
0

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

于 2016-07-18T16:15:47.123 回答