2017-04-04 2 views
0

J'ai trouvé the example dans threejs.org, qui dessine des flèches normales, c'est ce dont j'ai besoin. Mais les flèches sont des objets complexes et créées par ArrowHelper. J'ai regardé dans le code source et trouvé la méthode setDirection.Comment rendre des normales à la surface de l'objet dans trois.js

function setDirection(dir) { 

    // dir is assumed to be normalized 

    if (dir.y > 0.99999) { 

     this.quaternion.set(0, 0, 0, 1); 

    } else if (dir.y < - 0.99999) { 

     this.quaternion.set(1, 0, 0, 0); 

    } else { 

     axis.set(dir.z, 0, - dir.x).normalize(); 

     radians = Math.acos(dir.y); 

     this.quaternion.setFromAxisAngle(axis, radians); 

    } 

}; 

J'ai essayé de immpliment algorithme pour la mise en rotation pour Vector3 avec l'aide quaternion, mais je dois encore norlams qui regarde {x: 0, y: 0, z: 0}.

Et ma question est: Comment calculer un vecteur afin de tracer une ligne normale de la surface dans l'espace, afin d'obtenir le même picuter: enter image description here

UPD:
J'utilise CylinderGeometry.

UPD2:
Je l'ai résolu. Look at my codepen

+0

Vous devez calculer la normale de quoi? Avez-vous un 'bufferGeometry' ou un' geometry'? Ou vous avez trois «vecteur» qui sont les normales des sommets d'un visage? Cette question est totalement incomplète. –

+0

J'ai la même géométrie que dans l'exemple threejs. '' CylinderGeometry'' – artzub

+0

Je vous suggère de parcourir vos faces de géométrie et de calculer manuellement la normale pour chaque triangle. – mlkn

Répondre