参考地址:https://www.jianshu.com/p/d6e3b4b153bb

https://www.jqhtml.com/10513.html

官方文档:https://github.com/tweenjs/tween.js/blob/master/docs/user_guide.md

曲线经典讲解:https://www.cnblogs.com/cloudgamer/archive/2009/01/06/tween.html#!comments

three.js 模型插件、

tween.js --过渡动画插件

概念:将模型场景内的某个参数改变为另一个参数、直接改变用户视觉体验不好、所以增加期间的动画过渡效果

本次更改的是相机位置与控制点的位置、一般的网页模型改变这两个参数完全足够使用了、当然、也有更改相机角度什么的

坑:

1、所有关于模型基础参数的数据更改函数必须放到模型构造函数前面、否则会报错

2、tween.onUpdate() 这里需要重新定义一下this、新手就是坑多。

3、 网上看到的资料是  target 但是我更改这个参数没有效果、 打印之后发现有个target0 、尝试更改之后发现可以执行、不知道是否符合常规操作、反正先实现效果吧

备注: 后续发现问题、更改target0 可以实现效果、但是target0是以当前屏幕为中心点进行变化、target 应该是场景中心点

    

4、TWEEN.update() 必须添加到模型渲染函数内

5、记得重置一下模型位置、如果你是使用的  OrbitControls 控制器的话

使用到的参数:

this.camera.position //相机坐标
this.orbitControls.target //控制点坐标

tween使用到的函数:

tween = new TWEEN.Tween({}) // 动画起点坐标
tween.to({) // 动画终点坐标
tween.onUpdate(dunction(object){}) // 每一帧执行函数 、这个地方就是核心了、每变一帧跟新一次页面元素 tween.onComplete(function(){}) // 动画完成后的执行函数 tween.easing(TWEEN.Easing.Cubic.InOut) // 动画曲线、上面链接有其他的效果、我反正是没有实现。
tween.start() // 这个函数必须有、这个是启动函数、不加不能启动 TWEEN.update() // 动画更新函数、这个函数需要加到加载模型时使用的动画执行函数内、不加不能正常执行、但是也不会报错、需要注意

模型渲染函数:

重点是要在这里加上 TWEEN.update() 。。卡了我半天。

    animate() {
// 渲染
this.renderer.render(this.scene, this.camera);
this.setanimation(); // 旋转事件绑定
window.requestAnimationFrame(() => this.animate());
TWEEN.update()
},

相机位置更改函数:

setcamera(e){
let cameralist = [
{ x: 10, y: 10, z: 10 },
{ x: 20, y: 20, z: 10 },
{ x: 50, y: 30, z: 20 }
];
this.animateCamera(this.camera.position,this.orbitControls.target,cameralist[e],{ x: 20, y: 20, z: 10 },this.callBack()) }

实际执行函数:

  animateCamera(oldP, oldT, newP, newT, callBack){

    console.log(oldP, oldT, newP, newT)
var tween = new TWEEN.Tween({
x1: oldP.x, // 相机x
y1: oldP.y, // 相机y
z1: oldP.z, // 相机z
x2: oldT.x, // 控制点的中心点x
y2: oldT.y, // 控制点的中心点y
z2: oldT.z // 控制点的中心点z
});
tween.to({
x1: newP.x,
y1: newP.y,
z1: newP.z,
x2: newT.x,
y2: newT.y,
z2: newT.z
},1000);
console.log(this.camera.position)
let slef = this
tween.onUpdate(function(object){ console.log(this)
slef.camera.position.set(this.x1,this.y1,this.z1)
// this.camera.position.x = this.x1;
// this.camera.position.y = this.y1;
// this.camera.position.z = this.z1;
slef.orbitControls.target0.x = this.x2;
slef.orbitControls.target0.y = this.y2;
slef.orbitControls.target0.z = this.z2;
slef.orbitControls.update();
console.log(slef.camera,slef.orbitControls) })
// console.log('执行过渡动画。。。')
tween.onComplete(function(){
// this.orbitControl.enabled = true;
console.log(this.camera,this.orbitControls)
callBack&&callBack()
})
tween.easing(TWEEN.Easing.Cubic.InOut);
tween.start();
}

回调函数:

  callBack(){
console.log("动画回调函数+++")
}

vue three.js 结合tween.js 实现动画过渡的更多相关文章

  1. Tween.js 动画效果

    一.apply,和call的用法. 先来一个与本次博文无关的东西,就是apply和call的用法.其实apply和call的用法都一样,只是他们的传参不一样.apply是数组,而call是单独的传,类 ...

  2. tween.js缓动(补间动画)

    一.理解tween.js 如果看到上面的已经理解了,可以跳过下面的部分.下面为对Tween.js的解释 下面就介绍如何使用这个Tween了,首先b.c.d三个参数(即初始值,变化量,持续时间)在缓动开 ...

  3. tween.js是一款可生成平滑动画效果的js动画库。tween.js允许你以平滑的方式修改元素的属性值。它可以通过设置生成各种类似CSS3的动画效果。

    简要教程 tween.js是一款可生成平滑动画效果的js动画库.相关的动画库插件还有:snabbt.js 强大的jQuery动画库插件和Tweene-超级强大的jQuery动画代理插件. tween. ...

  4. window.requestAnimationFrame与Tween.js配合使用实现动画缓动效果

    window.requestAnimationFrame 概述 window.requestAnimationFrame()这个方法是用来在页面重绘之前,通知浏览器调用一个指定的函数,以满足开发者操作 ...

  5. Vue.js表单校验;动画指令;避免内存泄露。

    Vue.js表单校验: 动画指令:创建自定义的滚动指令. 避免内存泄露. 避免内存泄露 在单页面应用开发时SPA,用户无需刷新浏览器.所以javascript应用需要自行清理组件来防止内存占用不断增长 ...

  6. WebGL three.js学习笔记 加载外部模型以及Tween.js动画

    WebGL three.js学习笔记 加载外部模型以及Tween.js动画 本文的程序实现了加载外部stl格式的模型,以及学习了如何把加载的模型变为一个粒子系统,并使用Tween.js对该粒子系统进行 ...

  7. Vue中Js动画 与Velocity.js 多组件多元素 列表过渡

    Vue提供我们很多js动画钩子 写在tansition标签内部 入场动画 @before-enter="" 处理函数收到一个参数(e l) el为这个元素 @enter=" ...

  8. 借助tween.js小球沿div四边跑的动画效果

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  9. 利用tween.js算法生成缓动效果

    在讲tween类之前,不得不提的是贝塞尔曲线了.首先,贝塞尔曲线是指依据四个位置任意的点坐标绘制出的一条光滑曲线.它在作图工具或动画中中运用得比较多,例如PS中的钢笔工具,firework中的画笔等等 ...

随机推荐

  1. SpringBoot中的静态资源访问

    一.说在前面的话 我们之间介绍过SpringBoot自动配置的原理,基本上是如下: xxxxAutoConfiguration:帮我们给容器中自动配置组件: xxxxProperties:配置类来封装 ...

  2. POI实现excel的导入导出

    引入依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</arti ...

  3. java包装类注意点

    Integer one = new Integer(100); Integer two = new Integer(100); Integer three = 100; Integer fore = ...

  4. i++ ++i 理解

    i++与++i怎么运算,解决办法: i++规则是在表达式中先取i的值使用,后让i的值变化成加1后的值. 举例:如在式中 j=i++,他就会变成这样的两步,第一步先执行j=i,第二步执行i=i+1. + ...

  5. 快速构建CLI程序并发布到PyPi

    构造一个简单的CLI程序 typer 这个从去年就被各种营销号吹成Web框架的 第三方库, 与 FastAPI 同出一人之手,它不是Web框架,它是一个用来构建CLI程序的库,我们就简单搞个例子 # ...

  6. 前端路由原理之 hash 模式和 history 模式

    什么是路由? 个人理解路由就是浏览器 URL 和页面内容的一种映射关系. 比如你看到我这篇博客,博客的链接是一个 URL,而 URL 对应的就是我这篇博客的网页内容,这二者之间的映射关系就是路由. 其 ...

  7. openwrt开发笔记三:uci移植及API调用

    1.uci编译安装.移植 安装依赖 libubox #安装cmake sudo apt-get install cmake #下载依赖库libubox git clone http://git.nbd ...

  8. Java - 注释、标识符、关键字

    背景 要开始磕 Java 了,虽然以前学过用过,但是差不多忘光光了... 现在直接搬狂神的视频素材,不再自己总结,要学的东西太多了... 注释 单行注释 // 多行注释 /* */ 文档注释 /** ...

  9. ipsec.conf配置文件多个保护子网解析流程

    Author       : Email         : vip_13031075266@163.com Date          : 2021.01.23 Copyright : 未经同意不得 ...

  10. mysql远程连接以及错误解决&命令行基本操作

    现在大家的程序服务基本都是部署在云服务器上,今天我分享记录一下:使用mysql数据库过程中比较常见操作和遇到的问题 环境:lunix 系统(阿里云服务器,华为云服务器,腾讯云等均适用) + mysql ...