Animation dynamique des os en trois.js

est-il possible de créer une animation dynamique en appliquant des transformations aux os D'un modèle 3D à l'aide de trois.js? J'ai essayé de déplacer et de faire tourner les os D'un SkinnedMesh, mais le maillage n'a pas été mis à jour.

        loader = new THREE.JSONLoader();
        loader.load('/JS-Projects/Virtual-Jonah/Modelos/initialPose.js',function jsonReady( geometry )
        {
            mesh = new THREE.SkinnedMesh( geometry, new THREE.MeshNormalMaterial({skinning : true}) );
            mesh.scale.set( 10, 10, 10 );
            mesh.position.z = mesh.position.y = mesh.position.x = 0;
            mesh.geometry.dynamic = true;
            scene.add( mesh );

            var index = 0;
            for (var i = 0; i < mesh.bones.length; i++)
            {
                if (mesh.bones[i].name == "forearm_R")
                {
                    index = i;
                    break;
                }
            }


            setInterval (function ()
            {
                mesh.bones[index].useQuaternion = false;
                mesh.bones[index].position.z += 10;     
                mesh.bones[index].matrixAutoUpdate = true;
                mesh.bones[index].matrixWorldNeedsUpdate = true;
                mesh.geometry.verticesNeedUpdate = true;
                mesh.geometry.normalsNeedUpdate = true;

                renderer.render(scene, camera);
            }, 33);

            renderer.render(scene, camera);
        });

le modèle que j'utilise a été créé avec makeHuman (construction nocturne), exporté vers Collada, importé dans Blender et exporté vers les trois.js JSON modèle. Le lien avec le modèle est suivantes:

https://www.dropbox.com/sh/x1606vnaoghes1y/gG_BcZcEKd/initial

Merci!

15
demandé sur Fabio Picchi 2013-12-07 00:58:57

3 réponses

Oui, vous le pouvez! Vous devez définir mesh.skeleton.bones[i], les mesh.skeleton.bones[i].rotation et mesh.skeleton.bones[i].position. La Rotation est de type Euler. La Position est de type Vector3. J'ai en fait testé ceci en utilisant mon code d'ici https://github.com/lucasdealmeidasm/three-mm3d (qui comprend un filet dépouillé qui fonctionne avec des objets fixables aux os) et on peut en effet le faire.

notez que la réponse D'Inateno est très erronée, il y a de nombreux cas où cela est nécessaire. Par exemple, dans un SFP, on utilise à la fois animation dynamique et non dynamique. Lorsqu'un personnage court et tient une arme à feu, la direction à laquelle il pointe l'arme est déterminée dynamiquement (on pourrait utiliser du filet).squelette.os[i].rotation où " i " est l'index pour l'OS assigné au bras pour cela) tandis que le reste de l'animation, y compris la marche, est fait dans l'éditeur et chargé. On peut, en trois.js, utilise "trois".AnimationHandler.mise à jour(delta);" et puis changer seul os position et la rotation dans le code pour résoudre ces problèmes.

14
répondu Lucas de Almeida 2017-12-05 19:13:37

je sais que vous pouvez exporter une animation à base d'os à partir de Blender en format JSON, pour une utilisation en trois.js, il y a quelques tutoriels sur le web. J'espère que cette aide. Bonne Chance.

-1
répondu Ryan Blevins 2013-12-07 04:26:46

si je comprends que vous voulez créer des animations vous-même à l'intérieur du code ? Vous n'êtes pas censé faire cela, dans Unity vous avez un éditeur d'animation simple, vous ne manipulez jamais bones directement en code.

C'est long, ennuyeux, unperforming. Pour animer un modèle, utilisez l'animation directement. Voici un résultat d'animation avec quelques manipulations d'os mais il y a une animation plus.

http://threejs.org/examples/webgl_animation_skinning_morph.html

voici un tutoriel sur l'animation simple si vous avez besoin http://blog.romanliutikov.com/post/60461559240/rigging-and-skeletal-animation-in-three-js

et voici un billet sur les problèmes d'animation juste au cas où Blender exporte un 3.js animation-les os tournent étrangement

j'Espère que cela va vous aider :)

-4
répondu Inateno 2017-05-23 11:54:09