Transformer les normales de vertex en trois.js

J'ai des difficultés avec les normales de vertex dans THREE.js. (Pour la référence, j'utilise la révision 58.) Pour diverses raisons, j'aimerais d'abord calculer les identités du sommet du visage lorsque je configurerai ma géométrie, alors soyez libre de la transformer, de la fusion et de l'autre.

Bien que je me rends compte que les normales dépendent des sommets qui se transforment lorsque vous appliquez une matrice, je pensais que la géométrie.appliMatrix a également pu les transformer. Cependant, alors que les opérations suivantes fonctionnent bien:

geometry.applyMatrix(new THREE.Matrix4().makeScale(1, -1, 1)); geometry.computeFaceNormals(); geometry.computeVertexNormals(); 

… l'ordre d'opérations suivant donne des normales de vertex inversées:

 geometry.computeFaceNormals(); geometry.computeVertexNormals(); geometry.applyMatrix(new THREE.Matrix4().makeScale(1, -1, 1)); 

Je me demande simplement, est-ce que cela fonctionne comme prévu? Dois-je d'abord faire toutes les transformations sur la géométrie avant de calculer les normales de vertex?

Three.js ne supporte pas les réflexions dans la matrice objet . En définissant un facteur d'échelle négatif, vous réfléchissez la géométrie de l'objet.

Vous êtes libre d'appliquer une telle matrice à votre géométrie directement , mais, bien sûr, c'est ce que vous faites.

Cependant, cela entraînera un certain nombre de conséquences indésirables, dont l'une est que les faces géométriques n'auront plus d'ordre d'enroulement antihoraire, mais dans le sens des aiguilles d'une montre. Cela entraînera également des normales de face inversées calculées par geometry.computeFaceNormals() .

Je vous conseillerais de ne pas faire cela à moins d'être familier avec le fonctionnement interne de la bibliothèque.

Trois.js r.58