three.js学习笔记 用Tween.js做动画
来源:互联网 发布:系统网管软件 编辑:程序博客网 时间:2024/05/29 16:21
Tween.js 可以定义某个属性在两个值之间过渡。我们可以通过Tween.js控制我们的camera(相机)进行漫游或是控制物体或是粒子进行补间动画的操作。
添加补间动画
1.定义要控制的属性
var option = {px: camera.position.x,pz: camera.position.z};
我们这里控制camera(相机)的x,z轴坐标。
2.实例化tween对象
var tween = new TWEEN.Tween(option).to({ px: [-50, -40, -40, -50, -50, -50, -50, -50],pz: [-40, -40, -40, -40, -50, -50, -40, -40]}, 10000).onUpdate(function() {camera.position.x = this.px;camera.position.z = this.pz;}).delay(1000).start();
tween属性:.to 控制属性过渡的中间值 10000表示中间值个数有10000个
.update 控制过渡时候的操作
.delay 控制每次动画开始的时延
.start 开始动画
可以调用chain()函数使动画循环播放或是几个动画连续播放。
3.刷新动画
function render() {TWEEN.update();requestAnimationFrame(render);renderer.render(scene, camera);}
完整代码:
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>three.js</title></head><body><script type="text/javascript" src="js/Three/three.js"></script><script type="text/javascript" src="js/tween/tween.min.js"></script><script>var renderer, scene, camera, light, mesh, cylinder, plane;var spotLight, sphereLightMesh;var invert = 1;var phase = 0;function init() {renderer = new THREE.WebGLRenderer({antialias: true});renderer.setClearColor(0xffffff);renderer.setSize(window.innerWidth, window.innerHeight);renderer.shadowMapEnabled = true;scene = new THREE.Scene();camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);camera.lookAt(new THREE.Vector3(20, 0, 20));camera.position.set(-50, 20, -50);light = new THREE.AmbientLight(0xDDDDDD);scene.add(light);spotLight = new THREE.SpotLight(0xffffff);spotLight.position.set(10, 60, 20);spotLight.castShadow = true;scene.add(spotLight);document.body.appendChild(renderer.domElement);creatCube();render();}function creatCube() {var geometry = new THREE.CubeGeometry(4, 4, 4);var material = new THREE.MeshLambertMaterial({color: 0xff0000});mesh = new THREE.Mesh(geometry, material);mesh.castShadow = true;mesh.position.set(10, 10, 0);mesh.rotation.set(Math.PI / 4, 0, 0);scene.add(mesh);var geometry = new THREE.CylinderGeometry(2, 2, 8);var material = new THREE.MeshLambertMaterial({color: 0xff0000});cylinder = new THREE.Mesh(geometry, material);cylinder.position.set(-5, 10, 10);cylinder.rotation.set(Math.PI / 4, 0, 0);cylinder.castShadow = true;scene.add(cylinder);var plane_geometry = new THREE.CubeGeometry(40, 1, 40);var plane_material = new THREE.MeshLambertMaterial({color: 0xffffff});plane = new THREE.Mesh(plane_geometry, plane_material);plane.receiveShadow = true;plane.position.set(10, 2, 10);scene.add(plane);}function motionLight(light) {if (phase > 2 * Math.PI) {invert = invert * -1;phase -= 2 * Math.PI;} else {phase += 0.03;}light.position.z = +(7 * (Math.sin(phase)));light.position.x = +(14 * (Math.cos(phase)));if (invert < 0) {var pivot = 14;light.position.x = (invert * (light.position.x - pivot)) + pivot;}}function inittween() {var option = {px: camera.position.x,pz: camera.position.z};var tween = new TWEEN.Tween(option).to({px: [-50, -40, -40, -50, -50, -50, -50, -50],pz: [-40, -40, -40, -40, -50, -50, -40, -40]}, 10000).onUpdate(function() {camera.position.x = this.px;camera.position.z = this.pz;}).delay(1000).start();} function render() {TWEEN.update();requestAnimationFrame(render);renderer.render(scene, camera);motionLight(spotLight);}init();inittween();</script></body></html>
fork me on github blog: https://chenjy1225.github.io/
0 0
- three.js学习笔记 用Tween.js做动画
- tween.js 用户指南 - 与 Three.js 配合使用的补间动画库
- three.js学习笔记 射线
- Three.js学习笔记(一)
- web可视化学习----tween.js前端动画库
- three.js学习笔记 dat.gui.js和stats.js
- THREE.js 学习笔记(一)
- three.js学习笔记 基础1_1
- three.js学习笔记 基础1_2
- three.js学习笔记 光和影
- three.js学习笔记 太阳眩光
- three.js学习笔记 相机控件
- three.js学习笔记 Physijs物理引擎
- three.js学习笔记(一)-DirectionalLight
- three.js笔记
- three.js 动画效果01
- 制造平滑动画的Tween.js库
- 缓动动画插件tween.js
- seo人如何发外链?
- 日志2016-1-6
- Linux tty驱动学习 - UART驱动的write操作流程
- CocoaPod search 查看不到最新版本库问题
- HDOJ 2000 ASCII码排序
- three.js学习笔记 用Tween.js做动画
- JS实现全屏
- 实例9:实现根据身高计算标准体重
- ios Xcode 运行常见错误解决
- Java项目部署总结(三)nginx安装与配置
- Java 字符串与数值、数组之间的转化
- [IOS]对视频、音频播放器添加缓冲进度条
- 读DL论文心得之GoogLeNet
- 1216.1.6