2016-04-06 1 views
2

J'ai des cibles de morphing travail:Three.js: Obtenir des sommets mis à jour avec des cibles de morphing

https://jsfiddle.net/3wtwzuh3/2/ (Utilisez la commande de curseur pour voir le morph)

Cependant, je voudrais être capable d'accéder aux nouvelles positions des sommets après le morph. Si vous remarquez dans l'exemple lié, j'affiche la coordonnée y du premier sommet du cube et il ne se met pas à jour!

// This Y vertex doesn't seem to update! 
    elInfo.innerHTML = geometry.vertices[0].y; 

Est-il possible d'obtenir les nouvelles positions? J'ai essayé de mettre toutes sortes de drapeaux et je n'ai pas eu de chance.

Merci!

Veuillez noter que cet exemple est juste pour les fins de la question, c'est un peu plus complexe dans mon projet actuel (où j'ai besoin des données de vertex!).

Répondre

4

Les morphes sont mis à jour sur le GPU et non sur la CPU. Donc, si vous voulez connaître la nouvelle position du sommet, vous devez faire le même calcul sur le CPU que le GPU.

La méthode Mesh.raycast() doit effectuer ce calcul pour la diffusion par rayons sur la CPU, vous pouvez donc vous référer à ce code comme exemple.

Voici un modèle simple que vous pouvez suivre. Vous devrez l'adapter pour votre application complète, car ce modèle est câblé pour correspondre à votre violon simple.

var morphTargets = mesh.geometry.morphTargets; 
var morphInfluences = mesh.morphTargetInfluences; 

var vA = new THREE.Vector3(); 
var tempA = new THREE.Vector3(); 

var fvA = geometry.vertices[ 0 ]; // the vertex to transform 

for (var t = 0, tl = morphTargets.length; t < tl; t ++) { 

    var influence = morphInfluences[ t ]; 

    if (influence === 0) continue; 

    var targets = morphTargets[ t ].vertices; 

    vA.addScaledVector(tempA.subVectors(targets[ 0 ], fvA), influence); // targets index must match vertex index 

} 

vA.add(fvA); // the transformed value 

violon: https://jsfiddle.net/3wtwzuh3/3/

Three.js R.75

+0

Exactement ce que je devais savoir. Merci beaucoup cela a fonctionné parfaitement! – AlexKempton