public static float intersectRayPlane(Rayf ray, Planef plane, float epsilon) {
        return intersectRayPlane(ray.oX, ray.oY, ray.oZ, ray.dX, ray.dY, ray.dZ, plane.a, plane.b, plane.c, plane.d, epsilon);
    }
public static float intersectRayPlane ( Rayf ray , Planef plane , float epsilon ) { return intersectRayPlane ( ray . oX , ray . oY , ray . oZ , ray . dX , ray . dY , ray . dZ , plane . a , plane . b , plane . c , plane . d , epsilon ) ; }
Test whether the given ray intersects the given plane, and return the
value of the parameter <i>t</i> in the ray equation <i>p(t) = origin + t * dir</i> of the intersection point.
<p>
This method returns <code>-1.0</code> if the ray does not intersect the plane, because it is either parallel to the plane or its direction points
away from the plane or the ray's origin is on the <i>negative</i> side of the plane (i.e. the plane's normal points away from the ray's origin).
<p>
Reference: <a href="https://www.siggraph.org/education/materials/HyperGraph/raytrace/rayplane_intersection.htm">https://www.siggraph.org/</a>

@param ray
the ray
@param plane
the plane
@param epsilon
some small epsilon for when the ray is parallel to the plane
@return the value of the parameter <i>t</i> in the ray equation <i>p(t) = origin + t * dir</i> of the intersection point, if the ray
intersects the plane; <code>-1.0</code> otherwise