【Three.js】十一、three.js使用Tween.js

【Three.js】十一、three.js使用Tween.js

tween.js是一个轻量级js库,可用来实现一些动画效果。github地址:https://github.com/tweenjs/tween.js/.

cnpm安装方式:cnpm install @tweenjs/tween.js -S

使用方法:
1.创建补间

let size1 = {width: 10, height: 10, depth: 10};
let tween = new TWEEN.Tween(size1);

2.指定动画的最终状态

tween.to({width: 5, height: 5, depth: 5}, 1000); // 指定动画时间1s

3.指定onUpdate

tween.onUpdate(() => {
	// 给相关变化属性赋值
});

4.开始动画

tween.start();

5.调用Tween.update()

function animate() {
	requestAnimationFrame(animate);
	// [...]
	TWEEN.update();
	// [...]
}

*官方文档:https://github.com/tweenjs/tween.js/blob/master/docs/user_guide_zh-CN.md

示例:

import '../../stylus/index.styl'
import TWEEN from '@tweenjs/tween.js'
import * as THREE from 'three'
import {initStats,initThree,initTrackballControls} from "../../util/util"

function init() {
    let stats = initStats();
    let {camera, renderer, scene} = initThree();
    let trackballControls = initTrackballControls(camera, renderer);

    let light = new THREE.DirectionalLight(0xffffff);
    light.position.set(-20, 40, 30);
    scene.add(light);

    let ambientLight = new THREE.AmbientLight(0xcccccc);
    scene.add(ambientLight);

    let boxGeometry = new THREE.BoxBufferGeometry(10,10,10);
    let boxMaterial = new THREE.MeshStandardMaterial({
        color: 0xaa12233
    });
    let box = new THREE.Mesh(boxGeometry, boxMaterial);
    box.castShadow = true;
    scene.add(box);
    let size1 = {width: 10, height: 10, depth: 10};
    let size2 = {width: 5, height: 5, depth: 5};
    // 缩小
    let tween1 = new TWEEN.Tween(size1).to({width: 5, height: 5, depth: 5}, 1000)
        .easing(TWEEN.Easing.Quadratic.Out)
        .onUpdate(() => {
            if (size1.width <= 5) {
                tween2.start();
            }
            box.geometry = new THREE.BoxBufferGeometry(size1.width, size1.height, size1.depth);
        });
    // 放大
    let tween2 = new TWEEN.Tween(size2).to({width: 10, height: 10, depth: 10}, 1000)
        .easing(TWEEN.Easing.Quadratic.In)
        .onUpdate(() => {
            box.geometry = new THREE.BoxBufferGeometry(size2.width, size2.height, size2.depth);
            if (size2.width >= 10) {
                tween1.start();
            }
        });
    tween1.start();

    let render = () => {
        stats.update();
        trackballControls.update();
        renderer.render(scene, camera);
        TWEEN.update();
        requestAnimationFrame(render);
    }
    render();
}
init();

在这里插入图片描述
完整示例参考(src/pages/three_animation_demo):https://github.com/MAXLZ1/threejs_demo

使用three.js时,可以结合tween.js来实现动画效果。tween.js是一个用于创建平滑过渡动画的JavaScript库,可以让你轻松地在three.js场景中添加动画效果。 下面是一个使用three.jstween.js创建动画效果的示例: ```javascript // 创建场景、相机和渲染器 var scene = new THREE.Scene(); var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); var renderer = new THREE.WebGLRenderer(); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); // 创建一个立方体 var geometry = new THREE.BoxGeometry(1, 1, 1); var material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); var cube = new THREE.Mesh(geometry, material); scene.add(cube); // 创建一个tween动画 var tween = new TWEEN.Tween(cube.position) .to({ x: 2, y: 2, z: 2 }, 2000) // 设置目标位置和动画时间 .easing(TWEEN.Easing.Quadratic.Out) // 设置动画缓动函数 .onUpdate(function () { // 在动画更新时执行的操作 cube.rotation.x += 0.01; cube.rotation.y += 0.01; }) .start(); // 开始动画 // 渲染循环 function animate() { requestAnimationFrame(animate); TWEEN.update(); // 更新tween动画 renderer.render(scene, camera); } animate(); ``` 这个示例中,我们创建了一个立方体,并使用tween.js创建了一个动画,使立方体从初始位置平滑地移动到目标位置。在动画更新时,我们还可以执行其他操作,比如旋转立方体。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MAXLZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值