2017-08-21 3 views
2

J'essaie de déplacer toutes les mailles, dont le fichier obj chargé est éloigné, afin que l'utilisateur puisse voir toutes les mailles.Éclatez ou éloignez les mailles du centre

Je suis en train d'imiter l'exemple suivant

Demo

Aller au lien cliquez sur exploser icône dans la barre de l'interface utilisateur et déplacez le curseur.

Qu'ai-je fait So Far j'avoir accès à toutes les mailles du modèle Je peux donc appliquer une fonction sur eux. Jusqu'à présent, j'ai bouclé à travers eux et leur a donné le vecteur de position aléatoire.

Cela fonctionne très bien et le modèle entier explose pour que chaque maille soit visible séparément.

Le problème

En donnant vecteur position aléatoire, ils se déplacent évidemment lieu au hasard. Je veux les déplacer exactement comme le lien partagé. Toute aide serait appréciée. Je suis nouveau à ce troisjs impressionnant et j'aimerais vraiment apprendre plus. Merci à l'avance

Modifier Exemple de code

function getRandomArbitrary(min, max) { 
    return Math.random() * (max - min) + min; 
} 
for(var i = 0; i < mainStand.children.length; i++) 
{ 
    pos1 = getRandomArbitrary(1 , 2); 
    pos2 = getRandomArbitrary(1 , 2); 
    pos3 = getRandomArbitrary(1 , 2); 
    mainStand.children[i].position.set(pos1 , pos2 , pos3); 
} 

mainStand est le chargé obj Modèle

+0

Pouvez-vous nous montrer du code? –

+0

@NathanP. Edité la question. Cela fonctionne bien. le modèle explose mais pas aussi cool que dans la démo. Je ne veux pas l'animation ou quoi que ce soit, mais chaque mesh devrait bouger dans la direction vers laquelle il se trouve. C'est tout –

+0

Je ne comprends pas où est le problème? Avez-vous besoin de l'expression mathématique? Avez-vous essayé d'augmenter 'x',' y', 'z' par' 1' chaque étape pour voir ce qui se passe? –

Répondre

1

Qu'est-ce que vous voulez faire est de déplacer toutes les mailles loin de la position centrale. Ceci est fait en calculant le vecteur entre la position du maillage et le centre, puis déplacez le maillage dans cette direction:

var center = new THREE.Vector3(0, 0, 0); 
var distanceToMove = 0.1; 

for (var i = 0; i < mainStand.children.length; i++) { 
    var meshPosition = mainStand.children[i].position; 

    var direction = meshPosition.clone().sub(center).normalize(); 

    var moveThisFar = direction.clone().multiplyScalar(distanceToMove); 

    mainStand.children[i].position.add(moveThisFar); 
} 
+0

différence est indéfinie! Pouvez-vous s'il vous plaît re-vérifier votre code. explosionDirection est également indéfini –

+0

J'ai corrigé le code maintenant. Cela devrait fonctionner @UzumakiNaruto –

+0

Nope Il ne fait rien. Retourne le vecteur (0,0,0). Pouvez-vous revérifier votre code s'il vous plaît –