public override Vector3 ReflectRayAtPoint(Vector3 incoming, Vector3 intersection) { float dotA = Vector3.Dot(plane.Normal, incoming); Vector3 r; if (dotA < 0) r = Vector3.Reflect(incoming, plane.Normal); else r = Vector3.Reflect(incoming, -plane.Normal); r.Normalize(); return r; } public override Vector3 GetNormalToPoint(Vector3 point) { float dotA = Vector3.Dot(plane.Normal, point); if (dotA < 0) return plane.Normal; else return -plane.Normal; }