调用clipAction.play()的Three.js使动画对象消失

时间:2017-10-11 12:58:37

标签: three.js

在Three.js中,调用action.play()使对象消失,控制台上没有任何错误或警告。

我使用THREE.ObjectLoader加载在blender中创建的JSON文件。 srt(位置/比例/四元数)动画位于生成的文件中。和morphtargets一样。为了优化文件大小,我将srt设置为一系列空对象。 morphtargets轨道位于主对象中,我克隆了5次以构建字符(确切地说是气球)。

我之前做了大量测试来介绍形状/变形动画。在成功之后,我完成了所有的动画。只有被消失的模特打败。 srt(位置/比例/四元数)动画之前工作正常。但是在重构代码之后,在调用action.play()之后,可以减少spagettied。然后,物体就会消失。回声混音器和包含剪辑的数组,一切看起来都是正确的(即我看到了曲目,名称是正确的等等)。同时检查新生成的JSON,它看起来是一样的和正确的(我还没有改变SRT动画,只引入了shapeanimation)

所以我迷失了,并认为这看起来越来越像一个bug。根据以前的经验,我知道它有效(或已经有效)。

我创建了一个jsfiddle:https://jsfiddle.net/oompol/3ya6sqed/

[edit]我打开了action.play并从div [/ edit]中的链接调用了该函数,请注意我注释掉了action.play()。所以你看到了load和init工作。请参阅下面列出的功能

function playScene(scene) {
  for (parentName in srtMixers) {
    var clpName = "balloon1_fly";
    var clp = THREE.AnimationClip.findByName(animLib, clpName);
    var action = srtMixers[parentName].clipAction(clp);
    action.clampWhenFinished = true;
    console.log("playScene:", clpName, clp, parentName, srtMixers);
    //this is when the problem happens
    action.play();
  }
}

这是我正在加载的JSON: https://rawgit.com/bakajin/2e3d2f6a722103ed4aefd76f6250ec08/raw/28cad35c20060d478499c0cd40a2753611993720/oomp-scene_balloons-oomp-6.9.4.json

1 个答案:

答案 0 :(得分:0)

确定,

确实存在缩放问题。 Blender的io_three JSON导出器(r87 dev)在几何对象中写入了不正确的矩阵变换数据(非常小的缩放值)。带有缩放键的动画轨迹被正确写为1,1,1。因此,所有对象都立即缩小了视图范围。

很难看到因为几何体没有单独的缩放值而是矩阵。当你设置"场景"出口时为真。

通过在关键帧轨道中输入缩放值来解决此问题。但这只有在你没有缩放动画时才会起作用(所以键都是一个)。

与此同时,我手工编辑了JSON。因为这不是唯一不正确的数据。动画对象的格式也是错误的。 morphTargetInfluence Keys的持续时间也不正确。这些键的格式也不总是正确的。

希望这有助于其他一些人