public static SurfaceTypes ComputeSurfaceType(JVector[] triangle, WindingTypes winding) { var p0 = triangle[0]; var p1 = triangle[1]; var p2 = triangle[2]; return(ComputeSurfaceType(Utilities.ComputeNormal(p0, p1, p2, winding).ToVec3(), out _)); }
public static JVector ComputeNormal(JVector p0, JVector p1, JVector p2, WindingTypes winding, bool shouldNormalize = true) { var v0 = JVector.Subtract(p1, p0); var v1 = JVector.Subtract(p2, p0); // This calculation is the same as the one used in a constructor below, but due to using JVector vs. vec3, // it's easier to just duplicate the code. var v = JVector.Cross(v0, v1) * (winding == WindingTypes.Clockwise ? 1 : -1); return(shouldNormalize ? JVector.Normalize(v) : v); }
public static vec3 Normal(vec3 p0, vec3 p1, vec3 p2, WindingTypes winding, bool shouldNormalize = true) { var v = Cross(p1 - p0, p2 - p0) * (winding == WindingTypes.Clockwise ? 1 : -1); return(shouldNormalize ? Normalize(v) : v); }
public static vec3 Normal(vec3[] triangle, WindingTypes winding, bool shouldNormalize = true) { return(Normal(triangle[0], triangle[1], triangle[2], winding, shouldNormalize)); }
public SurfaceTriangle(vec3 p0, vec3 p1, vec3 p2, WindingTypes winding, int material, bool shouldComputeFlatNormal = false) : this(p0, p1, p2, Utilities.ComputeNormal(p0, p1, p2, winding), material, null, shouldComputeFlatNormal) { }