当前位置: 首页 > news >正文

Vue3+Three.js:第05期 时间控制,requestAnimationFrame vs Clock

文章目录

  • 目标
  • requestAnimationFrame传递给animate的时间参数
    • 根据这个时间参数,我们实现官网的案例
    • 总结
  • THREE.Clock
    • 查看Clock
    • 总结

目标

  • 了解three.js中几个时间
  • 理解,动画需要时间

requestAnimationFrame传递给animate的时间参数

根据这个时间参数,我们实现官网的案例

function animate(timestamp) {console.log("当前帧时间戳:", timestamp);// 动画逻辑...
}
requestAnimationFrame(animate);
  • requestAnimationFrame是window身上的一个函数,animate是作为形参,传入requestAnimationFrame,是requestAnimationFrame的回调函数。
  • 当requestAnimationFrame调用animate时,会给它传入一个时间戳,表示动画的时间与动画开始时间的差值,即动画开始了多长时间
  • 有了这个时间,我们就可以做很多事情,我们可以得到时间差,代码如下
let startTime = 0
// 5.动画循环渲染场景
function animate(time: number = 0) {const deltaTime = (time - startTime) / 1000// console.log(deltaTime)startTime = timerequestAnimationFrame(animate)// 渲染场景renderer.render(scene, camera)
}

我们在渲染官方的第一个样例时,用到了这个时间差。代码如下:

const clock = new THREE.Clock()
// 5.动画循环渲染场景
function animate() {requestAnimationFrame(animate)mixer && mixer.update(clock.getDelta()) // 更新3D模型的动画controls.update()// 如果启用了自动绕Z轴旋转if (autoRotateZ && model) {model.rotation.z += rotationSpeedZ}// 渲染场景renderer.render(scene, camera)
}

这里用的是three身上的clock,如果我们改为上面的也是一样。先看代码:

在这里插入图片描述

这样我们就取代了clock,而是使用了requestAnimationFrame这个函数在调用animate时,给它传入的时间参数。页面效果不变。

在这里插入图片描述

总结

  • requestAnimationFrame传递给animate的时间是一个毫秒单位的开始动画的时间。但我们这里根据编码的方式,实现拿到时间差。传递给混合器即可。
  • 着重理解时间的概念,在动画里面本来就有时间这个概念,动画是在不同时间上的不同图片根据时间来按次序组成并播放的的。
  • 主要的时间也就是当前时间、时间差、开始时间、结束时间、总时长等。(我们这里动画开始时间为0,其他的都可以根据每一帧的时间算出来)
  • 接下来,我们再看看threejs的clock。

THREE.Clock

查看Clock

在这里插入图片描述

  • 我们通过上面的打印,可以看到,Clock中包含哪些属性
  • 开始时间为0
  • oldTime代表了我们打印时的当前时间,单位为毫秒
  • elapsedTime为当前时间减去开始时间,单位换算成了秒

在这里插入图片描述

  • 上面框出来它身上的函数。
  • 在我们的样例中,用到的是getDelta这个函数,来获取时间差。
  • 而getElapsedTime是动画开始的时长,也就是requestAnimationFrame传给animate的时间参数

总结

  • THREE.Clock是一个封装好的类,通过它构造出来的clock对象,我们可以通过它身上的数据以及函数,轻松的获取我们想要的时间,具体的解释上面基本都有,或者自己打印出来研究。
  • 用哪一个呢,都可以,但是个人觉得用封装好的THREE.Clock,方便嘛
http://www.dtcms.com/a/488005.html

相关文章:

  • 松江做微网站电子商务网站的优点有那些
  • 个体营业执照网站备案做网站都需要用到什么
  • Python CGI 编程
  • 网页传奇平台优化关键词的作用
  • 定制网站建设和运营网站开发合同履约
  • java枚举能继承接口吗
  • 三分钟学懂3D建模中的UV Position Map
  • 广州网站推广公司wordpress 教学
  • 做外贸的网站哪个好cent7.4安装wordpress
  • 网站建设电话销售网站app生成器下载
  • 网站seo关键词排名优化wordpress自动发文章工具
  • /etc/login.defs vs chage:什么时候用什么?
  • 10.15 作业
  • seo短视频网页入口引流在线观看网站网站友情链接美化代码
  • 机器视觉旋转标定算法+补偿角度计算讲解(现场应用版)
  • 湖北网站推广公司技巧网站微信支付申请流程
  • 上海定制建站网站建设网站开发教育
  • 海关AEO认证:全球化企业的“通关护照”与“信用身份证”
  • 九号线香网站建设电子商务网站建设课后习题
  • Linux中比较两个字符串的前count个字符的汇编实现
  • 毕业论文与UML
  • LLMs-from-scratch :PyTorch 缓冲区(Buffers)
  • 购物网站开发设计思路有效方法的小企业网站建设
  • 怎么在国税网站上做实名认证html网站地图制作
  • Open JDK 下载
  • 建设电子商务系统网站做一个网站页面多少钱
  • 简单公司网站模版网站如何做才能被百度等收录
  • 中国网站建设哪家公司好电商网站有什么
  • 【遥感图像处理】基于遥感图像的建筑三维重建全流程指南(2025 版)
  • 如果做淘宝网站中小企业信息查询平台官网