点赞 + 关注 + 收藏 = 学会了
还记得当初学 CSS
时,有点基础后立刻就想搞点动画出来玩一下。
在了解了 Three.js 的基础概念之后也有这个想法。
简单的动画可以提高 Three.js 初学者
的学习兴趣和信心。
本文会从初学者的角度出发讲解几个简单的动画,包括:平移、旋转、缩放、跳跃。
在开始制作动画前,需要把基础的元素创建出来,之后所有动画案例都是基于下面的代码。
基础元素包括:
此时页面就会出现一个坐标轴和一个黄色的立方体,接下来就控制这个立方体运动。
如果对上面的代码还不太理解,可以先看看 《『Three.js』起飞!》 ,坐标轴方面可以看看 《『Three.js』辅助坐标轴》 。
这里讲的动画主要是指物体运动的效果。
第一个想到运动有关的 API
是 setInterval
,这个 API
可以设定每隔一定时间段就执行一次。比如 setInterval(() => {}, 1000)
,就1秒执行1次里面的函数。但 setInterval
在做动画时可能会遭遇阻塞的情况。所以不能保证每次执行的时间间隔都相同。于是推荐使用 requestAnimationFrame()
。
最简单的动画就是每一帧动一下,比如平移、旋转、缩放等。
平移可以理解成改变物体的位置。
在三维世界里,用 x、y、z
代表三个维度。
只要在每一帧都移动一下,不管是哪个维度都行,就可以做出一个平移动画。
比如,做一个以 x轴
方向的动画(来回移动)。
// 省略部分代码......
// 注释掉原本的渲染方法,我们需要另外写一个。
// renderer.render(scene, camera)
let step = 0 // 运动步长
function render() {
if (cube.position.x >= 4) {
step = -0.08
}
if (cube.position.x <= 0) {
step = 0.08
}
cube.position.x += step // 修改立方体在 x轴 的位置
renderer.render(scene, camera)
requestAnimationFrame(render) // 重复执行渲染方法
}
render()
如果想做变速动画,可以使用 cos
计算新的步长。
// 省略部分代码......
// 注释掉原本的渲染方法,我们需要另外写一个。
// renderer.render(scene, camera)
let step = 0 // 运动步长
function render() {
step += 0.1
cube.position.x = 2 + Math.cos(step)
renderer.render(scene, camera)
requestAnimationFrame(render) // 重复执行渲染方法
}
render()
旋转也是可以根据 x、y、z
轴方向进行旋转。
修改到的属性是 rotation
。
function render() {
cube.rotation.x += 0.01
cube.rotation.y += 0.01
cube.rotation.z += 0.01
renderer.render(scene, camera)
requestAnimationFrame(render)
}
render()
缩放也是有3个维度方向,同样也很简单,只需要修改立方体的 scale
属性。
let step = 0.05
function render() {
cube.scale.x += step
cube.scale.y += step
cube.scale.z += step
if (cube.scale.x >= 2) {
step = -0.05
}
if (cube.scale.x <= 1) {
step = 0.05
}
renderer.render(scene, camera)
requestAnimationFrame(render)
}
render()
跳跃需要改变2个维度的值。
为了让跳跃效果更加舒服,可以使用三角函数去计算步长。
let step = 0
function render() {
step += 0.08
cube.position.x = 4 * (Math.cos(step))
cube.position.y = 3 * Math.abs(Math.sin(step))
renderer.render(scene, camera)
requestAnimationFrame(render)
}
render()
数学很重要!
⭐几个Three.js简单动画
《『Three.js』起飞!》
《『Three.js』辅助坐标轴》
《『Three.js』场景 Scene》
《Canvas 从入门到劝朋友放弃(图解版)》
《Canvas 10款基础滤镜(原理篇)》
点赞 + 关注 + 收藏 = 学会了 代码仓库