三个 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 文件加载的动画吗?的主要内容,如果未能解决你的问题,请参考以下文章
Three.js Collada - 在三个 js 中加载多个 Collada 对象