4

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

那可能吗?

在运行时,我注意到 collada.animations 对象包含一个 - collada.animations[n].node - 这似乎是一个 THREEJS.Mesh 对象,我一直试图在运行时替换它(无济于事)。我还注意到 collada.animations[n].hierarchy[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] 对象以在动态创建的场景对象上使用相同的动画?

4

1 回答 1

3

由于这个问题是几年前写的,所以改写了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 支持动画的任何其他格式。

于 2018-01-07T06:36:51.697 回答