THREE.AnimationClip在播放期间始终包括默认姿势关键帧()

THREE.AnimationClip在播放期间始终包括默认姿势关键帧(),animation,three.js,trim,clip,Animation,Three.js,Trim,Clip,骨骼动画问题(始终使用AnimationAction.play()在(循环)动画中播放默认T姿势(关键帧0)。 动画是使用FBXLoader从带有骨架的.FBX文件和动画导入的 我已经修剪了AnimationClip.tracks数组()以删除第一个关键帧,但在动画过程中,它仍然包括基础关键帧0 T姿势 我尝试清空AnimationClip.tracks数组。如果我播放()关联的AnimationAction,它仍然会设置一些姿势,这表明问题可能根本不在AnimationClip中,而是在父操作

骨骼动画问题(始终使用AnimationAction.play()在(循环)动画中播放默认T姿势(关键帧0)。 动画是使用FBXLoader从带有骨架的.FBX文件和动画导入的

我已经修剪了AnimationClip.tracks数组()以删除第一个关键帧,但在动画过程中,它仍然包括基础关键帧0 T姿势

我尝试清空AnimationClip.tracks数组。如果我播放()关联的AnimationAction,它仍然会设置一些姿势,这表明问题可能根本不在AnimationClip中,而是在父操作/混合器中

我还尝试使用“startAt(0.0333..”抵消动画动作。但它仍然会在播放过程中添加基本姿势()


我希望动画期间不会使用任何关键帧0数据。尤其是在循环中:它们明显地结巴。(因为在位置上跳跃+到下一个姿势的奇怪插值)。

通过将所有动画导出到一个大模型文件而不是每个动画的单独文件来解决此问题。之后,你可以手动将它们切割成不同的剪辑,这样效果就很好了

//setup mixer for object
scene.mixer = new THREE.AnimationMixer( scene.obj );

// actions array (quick reference)
        scene.actions = [];
        for (i in scene.obj.animations) {
            scene.actions.push(scene.mixer.clipAction(scene.obj.animations[ i ] ));

// offset keyframe 0 (doesnt work since it still uses the keyframe 0 "T-pose" when the animation has finished playing and optionally loops)
scene.actions[i].startAt(0.0334);

// tried trimming with subClip fn, but again it'll throw in the T-pose.
subClip(scene.actions[3].getClip(), 0.03333333432674409 /* 30 fps: skip first frame @ 0.03333333432674408 */, 2);

// emptying the tracks array also doesnt work, since its still setting bones when I play/stop the AnimationAction.
scene.actions[3].getClip().tracks = [];
scene.actions[3].getClip().resetDuration();
}

function subClip(clip, start, end) {
    for (i in clip.tracks) {
      var track = clip.tracks[i];
        // (we depend on internal behaviour of trim() which uses Array.slice,
        // and doesn't modify the original array).
        clip.tracks[i].trim(start, end);

        // Once trim has been called, our track now has its own copies of
        // times/values, and no shared data. It's now safe to modify in-place,
        // which shift() does.
        clip.tracks[i].shift(-start);

    }
    // after modifying (key)frames, reset duration to new length
    clip.resetDuration();
}