GLTF 3D 模型在应有动画时却没有动画

问题描述 投票:0回答:2

所以目标很简单,我想为 3D 模型制作动画,导入为 .gltf 文件(它只有 1 个动画)。

我一直在遵循文档步骤:

https://thirdjs.org/docs/#manual/en/introduction/Animation-system

还有来自实习生的其他一些例子,所有这些看起来都几乎相同,只是做了一些修改,但想法每次都是一样的。

我的代码(注释的是失败的尝试):

                let loader = new THREE.GLTFLoader();
                loader.load('scene.gltf', function ( gltf ) {
                        GLTF = gltf;
                        let xMesh = gltf.scene.children[0];
                        scene.add(xMesh);//arWorldRoot.add(xMesh);
                        animation = new THREE.AnimationMixer(xMesh);
               animation.clipAction(gltf.animations[0]).setDuration(8).play();
                        //scene.add( gltf.scene );
                        //animation = new THREE.AnimationMixer(gltf.scene);
                        //animation.clipAction(gltf.animations[0]).play();
                        //gltf.animations.forEach(( clip ) => {
                        //animation.clipAction(clip).play();
                        //});
                        //render();
                }, undefined, function ( error ) {
                        console.error( error );
                } );
....
....
....
 function render() {
            requestAnimationFrame(render);
            var delta = new THREE.Clock().getDelta();
            if (animation != null) {
                animation.update(delta);
            };
            renderer.render(scene, camera);
 }

我从所有这些尝试中得到的输出是显示 3D 模型,但没有动画。在 devTools 中没有错误/警告。

遵循官方文档,这很奇怪,但不起作用,但我确信我错过了一些东西......

javascript three.js 3d augmented-reality gltf
2个回答
0
投票

我尝试了相同的代码并遇到了相同的问题。对于我来说, getDelta() 返回 0,所以动画没有前进。为了检查动画是否正常工作,我只需在animation.update()中手动输入一个值,即animation.update(0.01)。


0
投票

当 glTF 模型的文件结构中缺少任何动画数据时,它在编码中被视为“非动画”;这意味着它仅包含模型本身的 3D 几何形状和纹理,没有任何有关动画所需的运动、关键帧或骨骼结构的信息。

© www.soinside.com 2019 - 2024. All rights reserved.