# Ray-plane intersection to find the Z of the intersecting point

I have a rectangle in 3d space `(p1, p2, p3, p4)` and when the mouse rolls over it I need to calculate the exact Z of the point on the rect, given the mouse coordinates `(x, y)`.

Would a Ray-plane intersection find the Z of the intersecting point?

Edit: Would this one-liner work? .. it returns the `t` value for the intersection, apparently the Z value.

`````` float rayPlane(vector3D planepoint, vector3D normal, vector3D origin, vector3D direction){

return -((origin-planepoint).dot(normal))/(direction.dot(normal));
}
``````
-
Well, it seems to be right. – Notabene Jan 12 '11 at 19:39

If you dont mind using your rect as two triangles, here is the code from my (working) raytracer:

``````//RAY-TRAINGLE test
Vec3f e1 = p2 - p1;
Vec3f e2 = p3 - p1;
Vec3f s1 = cross(aRay.dir, e2);

float divisor = dot(s1, e1);
if (divisor == 0.)
return false; //not hit

float invDivisor = 1.f / divisor;

// Compute first barycentric coordinate
Vec3f d = aRay.org - p1;

float b1 = dot(d, s1) * invDivisor;
if (b1 < 0. || b1 > 1.)
return false; // not hit

// Compute second barycentric coordinate
Vec3f s2 = cross(d, e1);
float b2 = dot(aRay.dir, s2) * invDivisor;
if (b2 < 0. || b1 + b2 > 1.)
return false;

// Compute _t_ to intersection distance
float t = dot(e2, s2) * invDivisor; /// << HERE you go.
Vec3f intersection = aRay.org + t*aRay.dir;
``````
-
@notabene - cross() and dot() are 3d matrix functions? or are they math for triangles? could I ask for those too :)? You see I'm porting it to a much dumber language... – Jarvis Jan 12 '11 at 18:43
@Jenko Yes float t is a Z value. And cross and dot are the algebraic functions. What language are you using. I'm sure that there is some kind of simple algebra library. – Notabene Jan 12 '11 at 18:51
@notabene - Thank you! I'll try it out and let you know if it works ... :) – Jarvis Jan 12 '11 at 19:06
@Jenko - Yes you are always counting dot/cross product for 2 vectors. And good luck. – Notabene Jan 12 '11 at 19:13
@notabene - what does `aRay.org` and `aRay.dir` do? the origin and the direction of the vector? how can I calculate these? – Jarvis Jan 12 '11 at 19:14