小编最近根据项目需求需要加载FBX模型,刚开始呢只需要部分模型,于是小编就每个模型加载一次,随着模型数据越来越多,开始后面发现电脑开始嗡嗡的想,手机也是加载一会就闪退了,于是呢就开始小编的研究之路啦~
消息格式
字段名 | 字段类型 | 说明 |
---|---|---|
msgId | number | 消息ID |
fromId | number | 发送用户ID, 1表示系统消息, 2表示AIGC消息 |
targetType | number | 聊天类型,1.私信 |
targetId | number | 聊天类型为1时表示用户ID |
contentType | number | 消息类型 |
payload | object | 消息对象 |
createTime | number | 消息创建时间 |
summary | string | 消息摘要 |
1、首先这是官网给出的导入fbx模型的例子
var loader = new THREE.FBXLoader();
loader.load( '../model/fbx/Samba Dancing.fbx', function ( object ) {
//动画
mixers=object.mixer = new THREE.AnimationMixer( object );
var action = object.mixer.clipAction( object.animations[0]);
action.play();
object.traverse( function ( child ) {
if ( child.isMesh ) {
child.castShadow = true;
child.receiveShadow = true;
}
} );
//缩放
object.scale.set(0.5,0.5,0.5);
//位置
object.position.set(0,0,0);
scene.add( object );
} );
2、开始克隆fbx模型,由于找不到资料,我只能去github上找,然后发现上面说可以使用js的一个库SkeletonUtils。
import { SkeletonUtils } from 'three/examples/jsm/utils/SkeletonUtils.js'
var loader = new THREE.FBXLoader();
loader.load( '../model/fbx/Samba Dancing.fbx', function ( object ) {
//动画
mixers=object.mixer = new THREE.AnimationMixer( object );
var action = object.mixer.clipAction( object.animations[0]);
action.play();
object.traverse( function ( child ) {
if ( child.isMesh ) {
child.castShadow = true;
child.receiveShadow = true;
}
} );
//缩放
object.scale.set(0.5,0.5,0.5);
//位置
object.position.set(0,0,0);
scene.add( object );
//模型复制,如果需要大量复制,刻在下面进行循环
let meshBox = SkeletonUtils.clone(object)
meshBox.animations = object.animations
meshBox.mixer = new THREE.AnimationMixer(meshBox)
const action2 = meshBox.mixer.clipAction(meshBox.animations[0])
action2.play()
meshBox.position.set(0, 20, 0)
meshBox.scale.set(0.5, 0.5, 0.5)
sceneFish.add(meshBox)
} );
至此,小编学习fbx模型的加载和克隆就完毕啦~