如何在Qt 3D中控制帧速率
How can I control frame rate in Qt 3D?
我正在使用新的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>
中声明的全局typedef
。 minimum
和maximum
是以每秒帧数为单位的帧速率。更多信息来自这里和这里。
- 控制允许动态运行c++的并发操作数
- 从控制台中删除最后打印的元素
- 是否可以使用if constexpr删除控制流语句
- 无法在windows控制台中为C++程序提供必要的输入
- 控制到达非空函数clang(-Wreturn-type)的末尾
- 查找 GCD:并非所有控制路径都返回值
- 通过 API 控制 DJI 相机
- 禁止在控制台上记录谷神星
- 是否可以使用一个类来控制 C++ 中另一个类的对象?(阿杜伊诺)
- 如何删除列出的"QGraphicsPathItem"对象以控制进程内存使用情况?
- 我在 C++ 代码中遇到错误警告:控制到达非空函数 [-Wreturn 类型] 的末尾
- C++ Python 模块在 Blender 中崩溃,但在 Python 控制台中不会崩溃
- wx通用目录控制错误"wxTheFileIconsTable was nullptr"
- 视频流控制帧速率x264
- 控制控制绕过:
- Big 2游戏控制(控制游戏流程)
- 游戏循环帧速率控制问题
- 控制帧率
- 发行控制游戏帧率的c++
- 如何在Qt 3D中控制帧速率