2017-10-11 3 views
0

Dans Three.js, l'appel action.play() fait disparaître les objets, sans aucune erreur ni avertissement sur la console.L'appel de three.js clipAction.play() fait disparaître les objets animés

J'utilise THREE.ObjectLoader pour charger un fichier JSON créé dans blender. L'animation srt (position/scale/quaternion) se trouve dans le fichier généré. Comme le sont les morphtargets. Pour optimiser la taille de fichier, j'ai animé le srt comme une série d'objets nuls. Les pistes morphtargets sont dans l'objet principal, que je clone 5 fois pour construire les personnages (des ballons pour être précis). J'ai déjà fait des tests approfondis pour introduire l'animation forme/morph. Après avoir été un succès, j'ai finalisé toutes les animations. Seulement pour être éclipsé par les modèles qui disparaissent. L'animation srt (position/échelle/quaternion) fonctionnait bien avant. Mais après avoir refacturé le code, pour être moins spagettied, sur l'appel action.play(). Les objets disparaissent juste, exactement alors. Echoing les mélangeurs et le tableau contenant les clips, tout semble correct (c'est à dire que je vois les pistes, les noms sont bons etc). Examinant aussi le JSON nouvellement généré, il semble le même et correct (aussi je n'ai pas changé les animations SRT, seulement introduit shapeanimation)

Donc je suis perdu, et pense que cela ressemble de plus en plus à un bug. D'expérience antérieure je sais que cela fonctionne (ou a fonctionné).

J'ai créé un jsFiddle: https://jsfiddle.net/oompol/3ya6sqed/

[modifier] Je me suis tourné sur le action.play et appeler la fonction à partir du lien dans la div [/ edit] S'il vous plaît noter que j'ai commenté appeler action.play(). Donc, vous voyez le chargement et init travailler. Voir la fonction ci-dessous

function playScene(scene) { 
    for (parentName in srtMixers) { 
    var clpName = "balloon1_fly"; 
    var clp = THREE.AnimationClip.findByName(animLib, clpName); 
    var action = srtMixers[parentName].clipAction(clp); 
    action.clampWhenFinished = true; 
    console.log("playScene:", clpName, clp, parentName, srtMixers); 
    //this is when the problem happens 
    action.play(); 
    } 
} 

C'est le JSON Je chargement: https://rawgit.com/bakajin/2e3d2f6a722103ed4aefd76f6250ec08/raw/28cad35c20060d478499c0cd40a2753611993720/oomp-scene_balloons-oomp-6.9.4.json

+0

Si vous exportez la scène comme 'window.fgScene = fgScene', puis inspectez dans Dev Tools, vous pouvez voir la position/rotation/échelle et il y a des échelles vers le haut de' 1000872413286' ... qui semble suspect? –

+0

Sont-ils ?! Vous ne savez pas ce que vous voulez dire par window.fgScene = fGscene et quand vous définissez cela. Mais je sais que les échelles ne sont pas animées. Et si quelque chose leur arrive, cela les réduirait de moins de 1. – bakajin

+0

Voir [Inspection de javascript sur jsfiddle.net dans Google Chrome] (https: // stackoverflow.com/questions/5655058/inspection-javascript-sur-jsfiddle-net-dans-google-chrome). Vous pouvez utiliser un débogueur pour inspecter 'scene.children' et voir les positions et les échelles de tout dans la scène. –

Répondre

0

Ok,

il y avait quelque chose de très mal à l'échelle en effet. L'exportateur io_three JSON pour Blender (r87 dev) écrit des données de transformation de matrice incorrectes dans l'objet géométrique (très petites valeurs de mise à l'échelle). La piste d'animation avec les clés de mise à l'échelle ont été correctement écrites en tant que 1,1,1. Donc, tous les objets ont immédiatement disparu.

Difficile à voir car la géométrie n'a pas de valeur de mise à l'échelle séparée mais une matrice. Cela semble se produire lorsque vous définissez "Scene" sur true à l'exportation.

Contournement du problème en entrant la valeur de mise à l'échelle dans les pistes d'images clés. Mais ceci ne fonctionnera que si vous n'avez pas d'animation de mise à l'échelle (donc les touches sont toutes une).

En attendant, j'ai largement modifié le JSON à la main. Parce que ce ne sont pas les seules données incorrectes. Le formatage de l'objet d'animation est également incorrect. Les durées pour les clés morphTargetInfluence sont également incorrectes. Le formatage de ces touches n'est pas toujours correct.

Hope this helps autres ppl