Threejs 导入动态模型 - 兔子岛

文章介绍了如何利用Threejs的GLTFLoader加载glTF格式的3D模型,包括兔子模型的导入和动画播放。通过AnimationMixer进行动画控制,实现对场景中对象的独立动画播放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Threejs 动画模型

GLTF加载器(GLTFLoader)

glTF(gl传输格式)是一种开放格式的规范 (open format specification), 用于更高效地传输、加载3D内容。该类文件以JSON(.gltf)格式或二进制(.glb)格式提供, 外部文件存储贴图(.jpg、.png)和额外的二进制数据(.bin)。一个glTF组件可传输一个或多个场景, 包括网格、材质、贴图、蒙皮、骨架、变形目标、动画、灯光以及摄像机。

const loader = new GLTFLoader();

点击查看:例子

导入兔子模型

		const loader = new GLTFLoader();
		//兔子
		loader.load(
			Rabbit1, //import 兔子模型
			function (gltf) {
				console.log('兔子1', gltf);
				gltf.scene.scale.set(10, 10, 10);
				gltf.scene.position.set(10, 7, -125);
				gltf.scene.rotation.y = - 4;

				mixer = startAnimation( // 执行动画操作
					gltf.scene,
					gltf.animations,
					gltf.animations[3].name
				);

				scene.add(gltf.scene);
				animate();
			},
		);

打印查看兔子模型的动画有哪些:

在这里插入图片描述

通过startAnimation()执行动画操作:

function startAnimation(skinnedMesh, animations, animationName) {
			const m_mixer = new THREE.AnimationMixer(skinnedMesh);
			const clip = THREE.AnimationClip.findByName(animations, animationName);
			if (clip) {
				const action = m_mixer.clipAction(clip);
				action.play();
			}
			return m_mixer;
		};

AnimationMixer

动画混合器是用于场景中特定对象的动画的播放器。当场景中的多个对象独立动画时,每个对象都可以使用同一个动画混合器。

AnimationMixer( rootObject : Object3D )
  • rootObject - 混合器播放的动画所属的对象
  • time - 全局的混合器时间
  • timeScale - 全局时间(mixer time)的比例因子

一些方法:

  • .clipAction (clip : AnimationClip, optionalRoot : Object3D) :返回所传入的剪辑参数的AnimationAction, 根对象参数可选,默认值为混合器的默认根对象。第一个参数可以是动画剪辑(AnimationClip)对象或者动画剪辑的名称。
  • .existingAction (clip : AnimationClip, optionalRoot : Object3D) :返回传入剪辑的已有AnimationAction, 根对象参数可选,默认值为混合器的默认根对象。
  • .getRoot () :返回混合器的根对象
  • .stopAllAction () :停用混合器上所有预定的动作
  • .update (deltaTimeInSeconds : Number) :推进混合器时间并更新动画
  • .setTime (timeInSeconds : Number) :设置全局混合器到一个给定的时间,并相应地更新动画。
  • .uncacheClip (clip : AnimationClip):释放剪辑的所有内存资源
  • .uncacheRoot (root : Object3D) :释放根对象的所有内存资源
  • .uncacheAction (clip : AnimationClip, optionalRoot : Object3D) :释放动作的所有内存资源

源码体验地址

github:动画兔子岛
在线体验:https://threejs-rabbit-island.vercel.app/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

椰卤工程师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值