我有一个WebGL场景,我可以用一组参数来平衡渲染质量和速度。我希望尽可能高地向用户显示场景,只要帧速率不会因此而降低到某个阈值以下。为了实现这一点,我必须以某种方式测量“当前”帧速率以响应质量的变化。
但只要用户不与它交互(例如使用鼠标旋转相机),场景就是静态的。即使没有任何变化,我也不想让循环重新渲染同一个场景。如果场景停止移动,我想停止渲染。这意味着我不能简单地平均连续帧之间的时间,因为我无法区分渲染器缓慢和用户只是更慢地移动鼠标。
我考虑过在启动时多次渲染场景,并从中判断帧速率。但是场景的复杂性可能会随着时间的推移而改变,因为场景的一部分可以从当前的摄像机位置看到,或者由于画布外的用户交互。因此,当场景改变复杂性时,我必须调整质量。每次鼠标释放后运行校准循环可能是一种选择。
我还考虑使用finish
调用代替flush
调用来准确测量渲染时间。但是当我等待GL完成渲染时,我的应用程序基本上没有响应,特别是不能排队鼠标事件。由于我设想渲染理想地以目标阈值帧速率在两帧之间占据所有时间,这可能相当糟糕。我可能只会在某些情况下使用finish
代替flush
,例如在鼠标释放后使用{。
在WebGL应用程序中实现所需帧速率或定期测量渲染时间的最佳方法是什么?
答案 0 :(得分:1)
为什么不能使用平均渲染时间?
仅仅因为渲染频率较低,并不意味着你无法平均渲染时间。获得准确的平均值只需要更长的时间。
用户开始移动鼠标后,您将获得大量数据,无论如何都应该快速为您提供平均渲染率。