Mesh变换动画

Three.js 变换动画效果 | 三维可视化 / AI 提示词
📋 AI 提示词
prompt
1
使用 Three.js 和 GSAP 实现模型变换动画,包括位置、旋转和缩放的动画效果,使用 FBXLoader 加载模型。
🖼️ 效果预览
🎮 案例演示
效果描述
这是一个使用 GSAP 动画库实现模型变换动画的示例,包含位置、旋转和缩放的动画效果。
效果特性
- 位置动画:模型沿 Y 轴向上移动
- 旋转动画:模型绕 Y 轴旋转 45 度
- 缩放动画:模型沿 X 和 Z 轴缩放 2 倍
- FBX 模型加载:加载城市模型
- GSAP 动画:使用 GSAP 实现平滑动画
- Promise 链:使用 Promise.all 等待所有动画完成
核心参数
| 参数 | 值 | 说明 |
|---|---|---|
| 模型路径 | files/model/city.FBX | FBX 模型文件 |
| 模型缩放 | 0.0005 | 模型缩放比例 |
| 动画时长 | 3秒 | GSAP 动画持续时间 |
| 位置偏移 | Y+5 | 位置向上移动 5 单位 |
| 旋转角度 | PI/4 | 旋转 45 度 |
| 缩放倍数 | X/Z * 2 | 缩放 2 倍 |
核心代码解析
GSAP 变换动画
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function setTransformAnimate(mesh) {
const position = mesh.position.clone();
position.y += 5; // 位置向上移动
const rotation = mesh.rotation.clone();
rotation.y += Math.PI / 4; // 旋转45度
const scale = mesh.scale.clone();
scale.z *= 2; // 缩放z轴2倍
scale.x *= 2; // 缩放x轴2倍
const transformInfo_ = { position, rotation, scale };
// 执行动画
const promises_gsap = ["position", "rotation", "scale"].map((i) => {
return new Promise((resolve) => {
gsap.to(mesh[i], {
x: transformInfo_[i].x,
y: transformInfo_[i].y,
z: transformInfo_[i].z,
duration: 3,
ease: "none",
repeat: 0,
yoyo: false,
yoyoEase: true,
onComplete: resolve,
});
});
});
Promise.all(promises_gsap).then(() => console.log("动画完成"));
}
FBX 模型加载
javascript
1
2
3
4
5
new FBXLoader().load(FILE_HOST + "files/model/city.FBX", (object3d) => {
scene.add(object3d);
object3d.scale.set(0.0005, 0.0005, 0.0005);
setTransformAnimate(object3d);
});
技术亮点
- GSAP 动画:使用 GSAP 实现平滑的变换动画
- Promise 链:使用 Promise.all 等待多个动画完成
- 变换分离:位置、旋转、缩放分别动画
- FBX 加载:使用 FBXLoader 加载模型
- 克隆属性:使用 clone() 避免修改原始值
调试技巧
- 动画时长:调整 duration 参数控制动画速度
- 变换顺序:可以调整变换的顺序
- 模型缩放:FBX 模型通常需要缩放
- 动画回调:onComplete 回调在动画完成时触发
- Promise 处理:确保所有动画都完成后再执行后续操作
扩展方向
- 缓动函数:使用不同的 ease 函数创造不同效果
- 循环动画:设置 repeat: -1 实现循环动画
- 往返动画:设置 yoyo: true 实现往返动画
- 多模型动画:同时动画多个模型
- 动画序列:使用 GSAP Timeline 创建动画序列
本文档由 ThreeLab 编辑整理,如需转载,请注明出处。







京公网安备 11010502038735号
💬 评论区
评论功能即将上线,敬请期待!