I have the Segment-Plane collision function which I translated from C to Pascal, from the book Real-Time Collision Detection. You might be able to emulate the ray using a very large segment:
Code:
//------------------------------------------------------------------------------
function ch_IntersecaSegmentoPlano(
const S1, S2: gr_rVector3D; // Puntos del segmento
const P1: gr_rPlano3D;
var T: Single;
var P: gr_rVector3D
): Boolean;
var
AB: gr_rVector3D;
begin
Result := True;
AB := gr_Resta(S2, S1);
T := (P1.PP-gr_ProductoPunto(P1.N, S1))/gr_ProductoPunto(P1.N, AB);
if (T >= 0) and (T <= 1) then
begin
P := gr_Suma(S1, gr_Multiplica(AB, T));
Exit;
end;
Result := False;
end;
Sorry for the spanish, but it should be easy to understand (if you don't I can translate it). I highly recomend that book that explains very well most of the collision routines.
Bookmarks