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

Posted

技术标签:

【中文标题】三个 js - 你可以克隆从 collada 文件加载的动画吗?【英文标题】:Three js - Can you clone animations loaded from a collada file? 【发布时间】:2013-02-02 01:36:04 【问题描述】:

我基本上问的是与此处找到的问题相同的问题 - 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] 对象以在动态创建的场景对象上使用相同的动画?

【问题讨论】:

你找到解决办法了吗?我也面临同样的问题 不,反正不是我想要的。我有一个非常简单的用例,我可以使用 Tween JS (github.com/sole/tween.js) 来解决这个问题。不太清楚你的想法,但如果我想尝试克隆一个复杂的动画,我会先看看这个例子 - threejs.org/examples/#webgl_shadowmap 好的,感谢您的链接,我将尝试将其调整为 collada 模型,看看它是否有效。 【参考方案1】:

自从几年前写了这个问题以来,已经重写了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 支持动画的任何其他格式。

【讨论】:

以上是关于三个 js - 你可以克隆从 collada 文件加载的动画吗?的主要内容,如果未能解决你的问题,请参考以下文章

三个js万面渲染性能collada文件

Three.js Collada - 在三个 js 中加载多个 Collada 对象

三个 JS 1 场景 2 文件格式尚未工作

Three.js - 从文件输入加载 Collada 文件(和纹理)

三个.js Collada 纹理未加载

从 A-Frame 或 JS 更新 Collada (.dae) 文件代码