三个js-你可以克隆从collada文件加载的动画吗

Three js - Can you clone animations loaded from a collada file?

本文关键字:文件 collada 加载 动画 js- 三个      更新时间:2023-09-26

我问的问题与这里的问题基本相同-https://github.com/mrdoob/three.js/issues/1883-使用三个js,我可以导入一个带有基本关键帧动画的拼贴画场景,并很容易地播放这些动画,但我想将动画数据从一个场景对象复制到另一个场景。

这可能吗?

在运行时,我注意到collada.animations对象包含一个collada.animations[n].node,它看起来是一个THREEJS.Mesh对象,我一直试图在运行时替换它(但没有成功)。我还注意到collada.animations[n].hhierarch[n]对象也包含如下的节点属性:

cameras: Array[0]
channels: Array[9]
controllers: Array[0]
endTime: 2.5
geometries: Array[1]
id: "name_of_exported_object"
keys: Array[2]
matrix: THREE.Matrix4
name: "name_of_exported_object"
nodes: Array[0]
sid: null
sids: Array[9]
startTime: 0
transforms: Array[5]
type: "NODE"

该对象以.name和.id显示为绑定到我用3D包(Blender)创建的"name_of_exported_object"。。。我不太清楚这个节点对象的用途。如何更改collada.animation[n]对象以在动态创建的场景对象上使用相同的动画?

由于这个问题是几年前写的,three.js动画系统已经被重写。您不再需要"克隆"动画,只需使用不同的混合器将它们应用于其他对象即可。示例:

var clip; // some THREE.AnimationClip instance.
var mixer1 = new THREE.AnimationMixer( object1 );
var mixer2 = new THREE.AnimationMixer( object2 );
var action1 = mixer1.clipAction( clip );
var action2 = mixer2.clipAction( clip );
action1.play();
action2.play();

这并不是COLLADA独有的,它适用于FBX、glTF和three.js支持动画的任何其他格式。