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!
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.
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.
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 :)