public IntersectionInfo(float distance, Ray4 localRay, Vector3 baryCoord, Geomertry geomertry) { Distance = distance; BaryCoord = baryCoord; LocalRay = localRay; Geomertry = geomertry; }
public IntersectionInfo(float distance, Ray originalRay, Vector3 baryCoord, Geomertry geomertry) { Distance = distance; BaryCoord = baryCoord; OriginalRay = originalRay; Geomertry = geomertry; }
public static Intersectable CreateIntersectable(Geomertry geomertry) { if (geomertry is Triangle) return new TriangeIntersectable((Triangle) geomertry); else if (geomertry is CalculatedTriangle) { return new CalculatedTriangeIntersectable((CalculatedTriangle) geomertry); } else if (geomertry is Sphere) { return new SphereIntersectable((Sphere) geomertry); } throw new Exception("Unsuported geometry type"); }
private static bool ContaiseGeomertry(BoundingBox box, Geomertry geomertry) { if (geomertry is Triangle) { Triangle triangle = (Triangle) geomertry; Vector3 at = Vector3.Transform(triangle.A, triangle.Transform); Vector3 bt = Vector3.Transform(triangle.B, triangle.Transform); Vector3 ct = Vector3.Transform(triangle.C, triangle.Transform); return box.Contains(at) == ContainmentType.Contains || box.Contains(bt) == ContainmentType.Contains || box.Contains(ct) == ContainmentType.Contains; } else if (geomertry is Sphere) { Sphere sphere = (Sphere) geomertry; Vector3 center = Vector3.Transform(sphere.Center, sphere.Transform); float rx = sphere.Radius*sphere.Transform.M11; float ry = sphere.Radius*sphere.Transform.M22; float rz = sphere.Radius*sphere.Transform.M33; float maxR = Math.Max(rx, Math.Max(ry, rz)); float a = box.Max.X - box.Min.X; float b = box.Max.Y - box.Min.Y; float c = box.Max.Z - box.Min.Z; float halfDiagonal = (float) ((Math.Sqrt(a*a + b*b + c*c))/2.0); float distance = Vector3.Distance(center, (box.Max + box.Min)/2.0f); return distance <= halfDiagonal + maxR; } throw new Exception("Unsupported geometry"); }
public Intersectable(Geomertry geomertry) { Geomertry = geomertry; }
public IntersectionInfo(float distance, Ray4 localRay, Geomertry geomertry) { Distance = distance; LocalRay = localRay; Geomertry = geomertry; }
public IntersectionInfo(float distance, Ray originalRay, Geomertry geomertry) { Distance = distance; OriginalRay = originalRay; Geomertry = geomertry; }