RAY INTERSECTS POLYGON
Could anyone give a routine for ray intersects triangle?
I''ve got a ray intersects polygon rountine for Graphics Gems.
But. I don''t what the variables stand for.
and I just want it reduced to simple triangles intersect with ray.
here is the GRAPHICS GEMS routine. if you can translate it for me( or send a routine )
/*
An Efficient Ray/Polygon Intersection
by Didier Badouel
from "Graphics Gems", Academic Press, 1990
just code, not a procedure.
*/
/* the value of t is computed.
* i1 and i2 come from the polygon description.
* V is the vertex table for the polygon and N the
* associated normal vectors.
*/
P[0] = ray.O[0] + ray.D[0]*t;
P[1] = ray.O[1] + ray.D[1]*t;
P[2] = ray.O[2] + ray.D[2]*t;
u0 = P[i1] - V[0][i1]; v0 = P[i2] - V[0][i2];
inter = FALSE; i = 2;
do {
/* The polygon is viewed as (n-2) triangles. */
u1 = V[i-1][i1] - V[0][i1]; v1 = V[i-1][i2] - V[0][i2];
u2 = V[i1] - V[0][i1]; v2 = V[i2] - V[0][i2];
if (u1 == 0) {
beta = u0/u2;
if ((beta >= 0.)&&(beta <= 1.)) {
alpha = (v0 - beta*v2)/v1;
inter = ((alpha >= 0.)&&(alpha+beta) <= 1.));
}
} else {
beta = (v0*u1 - u0*v1)/(v2*u1 - u2*v1);
if ((beta >= 0.)&&(beta <= 1.)) {
alpha = (u0 - beta*u2)/u1;
inter = ((alpha >= 0)&&((alpha+beta) <= 1.));
}
}
} while ((!inter)&&(++i < poly.n));
if (inter) {
/* Storing the intersection point. */
ray.P[0] = P[0]; ray.P[1] = P[1]; ray.P[2] = P[2];
/* the normal vector can be interpolated now or later. */
if (poly.interpolate) {
gamma = 1 - (alpha+beta);
ray.normal[0] = gamma * N[0][0] + alpha * N[i-1][0] +
beta * N<i>[0];
ray.normal[1] = gamma * N[0][1] + alpha * N[i-1][1] +
beta * N[1];
ray.normal[2] = gamma * N[0][2] + alpha * N[i-1][2] +
beta * N[2];
}
}
return (inter);
</i>
Game Core
I just implemented a set of ray intersection routines yesterday (plane, triangle, sphere, AABB, and OBB). The triangle one is based on Tomas Moller''s work, which you can find here (includes C source):
http://www.ce.chalmers.se/staff/tomasm/
My sphere test is also based on his algorithm as described in the excerpt from the book "Realtime Rendering" which you can download from "www.realtimerendering.com". The excerpt does not contain source for the sphere or box tests, but includes pseudo-code which isn''t too hard to understand (I''ve also ordered the book but it won''t ship for 2-3 more weeks :-()
Toom
http://www.ce.chalmers.se/staff/tomasm/
My sphere test is also based on his algorithm as described in the excerpt from the book "Realtime Rendering" which you can download from "www.realtimerendering.com". The excerpt does not contain source for the sphere or box tests, but includes pseudo-code which isn''t too hard to understand (I''ve also ordered the book but it won''t ship for 2-3 more weeks :-()
Toom
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement