2017-02-23 1 views
2

J'ai besoin de faire une soustraction booléenne entre deux modèles en C#. L'un des maillages sera entièrement dans l'autre maillage, alors j'espérais inverser les normales pour un modèle et ajouter les deux modèles ensemble. Je ne sais pas comment inverser les normales.C# Calcule la surface normale inverse au lieu de la soustraction booléenne

Voici comment je calculer une surface normale:

//creates surface normals 
    Vector3D CalculateSurfaceNormal(Point3D p1, Point3D p2, Point3D p3) 
    { 
     Vector3D v1 = new Vector3D(0, 0, 0);    
     Vector3D v2 = new Vector3D(0, 0, 0); 
     Vector3D normal = new Vector3D(0, 0, 0); 

     // Finds The Vector Between 2 Points By Subtracting 
     // The x,y,z Coordinates From One Point To Another. 

     // Calculate The Vector From Point 2 To Point 1 
     v1.X = p1.X - p2.X;     
     v1.Y = p1.Y - p2.Y;     
     v1.Z = p1.Z - p2.Z;     
     // Calculate The Vector From Point 3 To Point 2 
     v2.X = p2.X - p3.X;     
     v2.Y = p2.Y - p3.Y;     
     v2.Z = p2.Z - p3.Z;     

     // Compute The Cross Product To Give Us A Surface Normal 
     normal.X = v1.Y * v2.Z - v1.Z * v2.Y; // Cross Product For Y - Z 
     normal.Y = v1.Z * v2.X - v1.X * v2.Z; // Cross Product For X - Z 
     normal.Z = v1.X * v2.Y - v1.Y * v2.X; // Cross Product For X - Y 

     normal.Normalize(); 

     return normal; 
    } 

est-il un moyen simple d'inverser la surface normale?

Répondre

1

Pour inverser une normale, il suffit de la supprimer (c'est-à-dire en annulant chaque composant). Cela inversera le sens qu'elle pointe dans.

normal.X = -normal.X 
normal.Y = -normal.Y 
normal.Z = -normal.Z 

Un type de vecteur aura probablement un opérateur de négation unaire surcharge pour cela, donc si vous avez que vous pourriez être en mesure de le faire simplement

normal = -normal 

Si vous êtes dans un environnement avec l'élimination de la face arrière, vous devrez inverser l'enroulement des sommets de chaque triangle (ce qui retournera naturellement la normale calculée). Pour ce faire, il suffit de retourner l'ordre de deux sommets du triangle.

+0

Merci, je vais essayer. –

+1

Merci, c'est d'inverser les normales. Cela ne donne pas ce que je voulais, mais je posterai une autre question une fois que j'en saurai plus sur ce qui se passe. –