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