使用三个 js 无法正常运行 FBX 动画
Posted
技术标签:
【中文标题】使用三个 js 无法正常运行 FBX 动画【英文标题】:FBX animations not running properly with three js 【发布时间】:2018-01-30 09:22:24 【问题描述】:我在某些 fbx 模型上遇到动画问题。例如,如果我有一个持续 20 秒的动画,模型将保持静止 19 秒,然后所有更改将在最后一秒左右发生。在其他 fbx 模型上,动画可以正确运行。 我用来运行动画的代码如下: loader.load 回调是:
var clock = new THREE.Clock();
var mixers = [];
function(object)
object.position.set(0,0,0);
object.mixer = new THREE.AnimationMixer(object);
mixers.push(object.mixer);
console.log(object);
for (var a = 0; a < object.animations.length; a++)
var action = object.mixer.clipAction(object.animations[a]);
action.play();
console.log(action);
scene.add(object);
animate();
而动画代码是:
function animate()
requestAnimationFrame(animate);
for(var i = 0; i < mixers.length; i++)
mixers[i].update(clock.getDelta());
render();
stats.update();
function render()
if (mixer)
mixer.update(clock.getDelta());
renderer.render(scene, camera);
有什么想法吗?谢谢!
【问题讨论】:
【参考方案1】:根据经验,我可以告诉您,fbx ascii 导出过程(至少对于 Autodesk Maya 而言)并不总是提供任何一个
-
在 Maya 或 中设置的正确开始和结束时间
提供了一组 Threejs 无法正确导入的数字。
你最终得到的是——正如你所描述的——动画中有很多时间什么都没有发生。据我所知,它通常在结尾处,但它当然也可能在开头。
您可以手动修复 fbx 文件,但添加一个函数将开始时间设置为第一帧的时间可能更容易(如果第一帧有问题,则从第二帧开始)。
我在某处有此代码,让我找到它,然后我会将其添加到此答案中。
【讨论】:
我遇到了同样的问题。当我从 Maya 导出时,动画需要一个接一个地排列,这样它们就不会全部重叠。例如剪辑 1 1-10、剪辑 2 11-33 等。将所有剪辑放入从第 1 帧开始的差异轨道会导致所有动画相互叠加,所以这不是一个选项(除非我不知道正确的导出工作流)。所以我想唯一的选择是创建一个函数来在剪辑的起始帧开始动画。知道怎么做吗?我要自己试一试,但想知道你是否有那个脚本。谢谢! 希望您已经找到答案 - 最初错过了您的帖子。 根据您的最终目标,您可以设置不同的剪辑开始播放的偏移量,方法是使用某些剪辑以延迟开始使用 animation.startAt() 或者您可以尝试分别启动每个剪辑,触发通过使用以下事件将它们从上一个剪辑的末尾移开:mixer.addEventListener('finished', function(e) ...);这些细节可以在这里找到:threejs.org/docs/#api/en/animation/AnimationAction以上是关于使用三个 js 无法正常运行 FBX 动画的主要内容,如果未能解决你的问题,请参考以下文章