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;
}

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

相关推荐
y先森1 小时前
CSS3中的伸缩盒模型(弹性盒子、弹性布局)之伸缩容器、伸缩项目、主轴方向、主轴换行方式、复合属性flex-flow
前端·css·css3
前端Hardy1 小时前
纯HTML&CSS实现3D旋转地球
前端·javascript·css·3d·html
susu10830189111 小时前
vue3中父div设置display flex,2个子div重叠
前端·javascript·vue.js
IT女孩儿2 小时前
CSS查缺补漏(补充上一条)
前端·css
吃杠碰小鸡3 小时前
commitlint校验git提交信息
前端
虾球xz3 小时前
游戏引擎学习第20天
前端·学习·游戏引擎
我爱李星璇4 小时前
HTML常用表格与标签
前端·html
疯狂的沙粒4 小时前
如何在Vue项目中应用TypeScript?应该注意那些点?
前端·vue.js·typescript
小镇程序员4 小时前
vue2 src_Todolist全局总线事件版本
前端·javascript·vue.js
野槐4 小时前
前端图像处理(一)
前端