Ejemplo n.º 1
0
 private static bool IsHidden(Vector3 v, Vector3 n, float maxDistance, List <Vector3> hidingVs, List <int> hidingTs, List <int> trianglesToCheck)
 {
     for (int i = 0; i < trianglesToCheck.Count; i++)
     {
         int     num     = trianglesToCheck[i] * 3;
         Vector3 vector  = hidingVs[hidingTs[num]];
         Vector3 vector2 = hidingVs[hidingTs[num + 1]];
         Vector3 vector3 = hidingVs[hidingTs[num + 2]];
         Vector3 normal  = MeshExtensions.GetNormal(vector, vector2, vector3);
         float   num2    = Vector3.Angle(n, normal);
         if (num2 < 60f)
         {
             float num3 = MeshExtensions.DistanceToPlane(v, n, vector, normal);
             if (num3 > 0f && num3 <= maxDistance)
             {
                 Vector3 p  = v + n * num3;
                 Vector2 v2 = p.Barycentric(vector, vector2, vector3);
                 if (v2.IsBarycentricInTriangle())
                 {
                     return(true);
                 }
             }
         }
     }
     return(false);
 }
Ejemplo n.º 2
0
        private static bool IsTriangleHidden(Vector3 v0, Vector3 v1, Vector3 v2, float maxDistance, List <Vector3> triMinCorners, List <Vector3> triMaxCorners, List <Vector3> hidingVs, List <int> hidingTs)
        {
            Vector3    normal = MeshExtensions.GetNormal(v0, v1, v2);
            List <int> trianglesWithinRange = MeshExtensions.GetTrianglesWithinRange(v0, v1, v2, maxDistance, triMinCorners, triMaxCorners);

            return(MeshExtensions.IsHidden((v0 + v1 + v2) / 3f, normal, maxDistance, hidingVs, hidingTs, trianglesWithinRange) && MeshExtensions.IsHidden(v0, normal, maxDistance, hidingVs, hidingTs, trianglesWithinRange) && MeshExtensions.IsHidden(v1, normal, maxDistance, hidingVs, hidingTs, trianglesWithinRange) && MeshExtensions.IsHidden(v2, normal, maxDistance, hidingVs, hidingTs, trianglesWithinRange));
        }