three 帧率控制

问题

在使用requestAnimateFrame的时候,不同的机器由于性能差异,帧率会有不小差别。比如我使用 22 款联想拯救者配 3060 的卡,官网许多案例可以跑到 165 帧,因为系统限制了最大帧率等于屏幕刷新率。 再者过高的帧率有时候会造成性能浪费,或者开发的应用需要兼顾到移动端的性能,那么控制帧率就变得必要了。

思路

在帧回调函数里通过判断距离上一帧回调函数更新的时间 deltadt 的和来更新 dt, 最后 dt 对帧间隔取余,这样做的目的是计算当前帧间隔和新帧间隔的差异,然后立即更新,下几帧就迅速趋近新的帧间隔了,奉上我的灵魂手绘(processon 真香):

看代码:

js 复制代码
const frameRate = 30;
let dt = 0;

let frameInterval = 1 / frameRate;

const clock = new THREE.Clock();
function render() {
	requestAnimateFrame();
	
	let time = clock.getDelta();
    const delta = Math.min(time, frameInterval);

    dt += time;
    if (dt > frameInterval) {
		// do frame logic
	}
	
	// renderer.render(scene, camera);
	
	dt = dt % frameInterval;
}

如果应用不是很复杂,这样简单的几行代码就能实现帧率精准控制,如果有帮助,赶紧来帮作者点个赞吧😁

相关推荐
遗憾随她而去.33 分钟前
前端浏览器缓存深度解析:从原理到实战
前端
万行1 小时前
企业级前后端认证方式
前端·windows
2501_948120151 小时前
基于Vue 3的可视化大屏系统设计
前端·javascript·vue.js
Jinuss2 小时前
源码分析之React中createFiberRoot方法创建Fiber根节点
前端·javascript·react.js
Jinuss2 小时前
源码分析之React中ReactDOMRoot实现
前端·javascript·react.js
web守墓人2 小时前
【前端】vue3的指令
前端
想起你的日子3 小时前
EFCore之Code First
前端·.netcore
框架图3 小时前
Html语法
前端·html
深耕AI3 小时前
【wordpress系列教程】07 网站迁移与备份
运维·服务器·前端·数据库