Advertisement

RAY INTERSECTS POLYGON

Started by January 28, 2001 09:53 PM
1 comment, last by BGCJR 23 years, 9 months ago
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
Advertisement
Thanks TOOM!

I found the triangle intersects triangle detection.

I love it. *shakes your hand*
Game Core

This topic is closed to new replies.

Advertisement