【Threejs】相机控制器动画

devtools/2024/11/14 12:28:46/

使用场景

官方提供了一个基于目标点、刷新速度,在每次renderer中执行的动画,但实际开发中你可能会需要基于设定时间、目标点添加动画,并且有更多自定义成分的方式

获取当前状态下控制器和相机的姿态

javascript">  getVisionCof() {let { controls } = this//当前场景的控制器console.log(controls);const currentCamera = controls.object; // 当前控制器的相机const target = controls.target; // 当前控制器的目标点// 获取相机的位置const position = currentCamera.position.clone();// 获取相机的旋转(四元数)const rotation = currentCamera.quaternion.clone();return { position, rotation, target }}

改变当前控制器和相机姿态

javascript"> setCameraPose(defaultVision, duration = 5000) {//defaultVision就是上面获取姿态的返回值const controls = this.controls;//这里涉及到相机切换 不过和动画没关系,用你的control就行if (!controls) return;const camera = controls.object; // 当前控制器的相机let { position, rotation, target } = defaultVisioncamera.position.set(position.x, position.y, position.z)if (target) {controls.target.set(target.x, target.y, target.z)} else {camera.rotation.set(rotation.x, rotation.y, rotation.z)}this.dispatchEvent({ type: "viewChange", message: null })}

相机动画方式移动

javascript">lerpCameraPose(defaultVision, duration = 500) {//defaultVision就是上面获取姿态的返回值const controls = this.controls;if (!controls) return;const camera = controls.object; // 当前控制器的相机let { position, rotation, target } = defaultVision;const startPosition = {x: camera.position.x,y: camera.position.y,z: camera.position.z,}const anim = new Anim(startPosition, position,{duration: duration,easingFunction: Anim.easeInOutQuad,onUpdate: (updated) => {console.log(updated);camera.position.set(updated.x, updated.y, updated.z)if (target) {controls.target.set(target.x, target.y, target.z)} else {camera.rotation.set(rotation.x, rotation.y, rotation.z)}},onComplete: () => {if (target) {controls.target.set(target.x, target.y, target.z)}}})anim.start()this.dispatchEvent({ type: "viewChange", message: null })}

Anim插件

这是一个无需配置的类似TWEEN的class,不需要任何参数,开箱即用。
鸢--------js自定义简易动画库.2014.3001.5502


http://www.ppmy.cn/devtools/132834.html

相关文章

光伏设计软件如何快速上手?

光伏设计软件是现代光伏系统设计不可或缺的工具,它们大大简化了设计流程,提高了设计效率。对于新手来说,快速上手一款光伏设计软件可能会显得有些困难,但只要掌握了一些基础操作,就能迅速提升设计技能。 1、导入CAD图片…

Java项目实战II基于Spring Boot的疗养院管理系统设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着人口老…

前端递归获取树(不限制层级)结构下的某个字段并组成数组返回

一、问题 后端需要把一个层级不确定的树下的code组成数组以入参的形式进行返回 二、递归处理树结构 function getCodes(data) {const codes [];// 内部递归函数function traverse(node) {if (node.unitCode) {codes.push(node.code); // 添加当前节点的 unitCode}if (node.c…

【Linux 29】传输层协议 - UDP

文章目录 🌈 一、端口号概念⭐ 1. 端口号的作用⭐ 2. 使用五元组唯一标识一个通信⭐ 3. 协议号 VS 端口号⭐ 4. 知名端口号⭐ 5. 端口号与进程的关系⭐ 6. netstat 查看网络状态 🌈 二、UDP 协议⭐ 1. UDP 协议格式⭐ 2. UDP 协议特点⭐ 3. 面向数据报概…

【科普小白】LLM大语言模型的基本原理

一、要了解LLM大模型的基本原理就要先来了解一下自然语言处理(NLP)。 NLP 是 AI 的一个子领域,专注于使计算机能够处理、解释和生成人类语言,主要任务包括:文本分类、自动翻译、问题回答、生成文本等。到底是NLP促生了…

AI Prompt如何帮你提升论文中的逻辑推理部分?

撰写学术论文时,逻辑推理不仅是支撑观点的核心,还直接影响读者对内容的理解和信服度。如何确保推理严密、论据充分、层层递进?现在,ChatGPT 能通过巧妙的 Prompt 设计帮助我们构建更有逻辑性的段落,提升论文的层次感。…

VMware 虚拟机使用教程及 Kali Linux 安装指南

VMware 虚拟机使用教程及 Kali Linux 安装指南 在现代计算机科学与网络安全领域,虚拟化技术的应用越来越广泛。VMware 是一款功能强大的虚拟化软件,可以帮助用户在同一台物理机上运行多个操作系统。本文将详细介绍如何使用 VMware 虚拟机,并…

UDP协议:报文结构和注意事项

欢迎浏览高耳机的博客 希望我们彼此都有更好的收获 感谢三连支持! 在网络编程中,UDP(用户数据报协议)以其轻量级和高效性而著称。这篇博客我们就来探讨UDP的报文结构,以及在使用UDP时需要注意的一些关键事项。 UDP代码实战:UDP…