2017-02-23 5 views
2

私はC#の2つのモデル間でブーリアン減算を行う必要があります。メッシュの1つは完全に他のメッシュ内にあるので、私は1つのモデルの法線を逆にして2つのモデルを一緒に追加することを望んでいました。私は法線を逆にする方法を失っている。C#Calucate表面ブール代数の代わりに通常の逆数

これは、私は、通常の表面を計算しています方法です:

//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; 
    } 

は、通常の表面を反転するための簡単な方法はありますか?

答えて

1

ノーマルを反転するには、それを無効にするだけです(つまり、各コンポーネントを無効にする)。これは、中に指し示す方向が逆になります。あなたは単に

normal = -normal 
を行うことができるかもしれないことを持っているので、もし

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

ベクトル型はおそらく、このための過負荷に単項否定演算子を持っています

バックカリングを行っている環境にいる場合は、各三角形の頂点の巻線を元に戻すことをお勧めします。これを行うには、三角形の任意の2つの頂点の順序を反転します。

+0

ありがとう、私はこれを試してみます。 –

+1

ありがとう、それは法線を反転させています。それは私が望んでいたものではありませんが、何が起こっているのかを知ると、別の質問を投稿します。 –

関連する問題