使用模型查看器播放多动画,使用混合器实例

Play multi animation with model viewer , using mixer instance

提问人:Beshoy FD 提问时间:7/2/2023 更新时间:9/13/2023 访问量:109

问:

我正在尝试在 Parellal 中播放多个动画,因为包不支持它,我正在尝试使用以下代码从场景访问混合器的实例

const $scene = Object.getOwnPropertySymbols(modelViewer).filter(symbol => symbol.description === 'scene')[0]; 
const scene = modelViewer[$scene]; 
console.log(scene); 
const clips = scene.animations; 
console.log(clips); 
console.log(scene.mixer); 
scene.mixer.clipAction(clips[0]).play();

我得到了混合器和场景的实例,但动画无法播放

console log

我试过玩动画,但它根本不起作用

javascript 模型查看 threejs-editor

评论


答:

0赞 Vincent 9/13/2023 #1

我或多或少尝试了相同的方法 - 使用像 three.js 这样的动画混合器在模型查看器中播放两个动画。 据我了解(和研究),这不可能开箱即用,需要实现(尽管这似乎并非不可能,因为模型查看器代码高度依赖于 three.js,因此可以扩展)。

但是,我找到了一种适用于某些用例的解决方法。 我有一个模型,有两个独立移动的部件(比方说一个带门和抽屉的餐边柜)。 在模型查看器中,我添加了两个滑块,第一个滑块控制门,第二个滑块控制抽屉。 在Blender中,我创建了一个3 * 3帧的动画,每个帧都显示了门和抽屉的打开角度和打开位置的不同组合。 导出到 glb 时,将所有动画打包为一个非常重要。 所以我得到这样的东西:

  1. 框架:开门 0% / 抽屉开 0%
  2. 框架:开门50%/抽屉开0%
  3. 框架:开门100%/抽屉开0%
  4. 框架:开门 0% / 抽屉开 50%
  5. 框架:开门 50% / 抽屉开 50%
  6. 框架:开门100%/抽屉开50%
  7. 框架:开门 0% / 抽屉开 100%
  8. 框架:开门 50% / 抽屉开 100%
  9. 框架:开门100%/抽屉开100%

滑块根据另一个滑块的当前值选择要显示的正确帧。 当然,您可以通过添加更多帧等来优化它。 但它工作得很好(而且特别流畅!),并且可以扩展到更多的对象,尽管它变得更加复杂。