Vector intersecting triangle

6475908f9503cf68fb9e462214ca4d73
0
elijah 101 Oct 07, 2009 at 05:45

Does anybody know how to find
1. the point at where the vector crosses the triangle.
2. Vector does not touch the triangle/intersect the triangle.

I have found an explanation on this website

http://www.cs.princeton.edu/courses/archive/fall00/cs426/lectures/raycast/sld018.htm

but it does not explain how to find Point P.

Can anybody help me on this.

8 Replies

Please log in or register to post a reply.

A8433b04cb41dd57113740b779f61acb
0
Reedbeta 167 Oct 07, 2009 at 05:55

In the article you linked to, point P is obtained by first intersecting the ray with the plane containing the triangle. If you step back two slides you can see how it goes together.

Anyway, intersecting a vector (really, a line segment) with a triangle should be just a matter of doing a ray-triangle intersection and then checking if the returned ‘t’ value is in the [0, 1] interval, i.e. between the endpoints of the vector.

Fd80f81596aa1cf809ceb1c2077e190b
0
rouncer 103 Oct 07, 2009 at 10:36

Just use T.

Ceee4d1295c32a0c1c08a9eae8c9459d
0
v71 105 Oct 07, 2009 at 13:42
/////////////////////////////////////////////////
// intersection beetween plane and line
// returns point of intersection

template < class T >
Vec3<T> RayPlaneIntr( Vec3<T> &A ,Vec3<T> &B,  Vec3<T> &P0,Vec3<T> &N )
{
    Vec3<T>   D;
    T t,denum;
    D=B-A;
    denum=dot( N,D );
     if ( denum==0.0f ) 
        denum=__EPSILON;
    t=dot( N,P0-A );
    t/=denum;
    return A + t*D;
}
6475908f9503cf68fb9e462214ca4d73
0
elijah 101 Oct 09, 2009 at 08:32

Hi v71,

Thanks for your code. I need to clarify some parameters
1. I Assume &A, &B are the start point and end point of the line.
2. &N is the normal of the plane.
3. Then what is P0 ? Can it also be the origin of the ray ?

If the line does not intersect, then what will be the value return ?

Ceee4d1295c32a0c1c08a9eae8c9459d
0
v71 105 Oct 09, 2009 at 10:53

Well i consider the triangle to be an infinite plane if you need to know if a point is contained inside the triangle, jus ask.
If denum is zero ( it woul be more nice to check for an absolute epsilon , but i found that this worked as well )then the triangle normal and the ray are orthogonal and thus they don’t intersect, this condition is never met since i put an epsilon rsulting in a very distant intersection point, then another function checks for the point to be contained inside the triangel itslef.
Your assumptions about the vectors are correct expcet for P0 , it is the origin of the plane where the triangle is inscribed, so
A and B start and end point of ray ( note that this is an infinite ray ) , P0
first point of the triangle and N is its normal.
Since i use this function as an ancillary function, you should do like this if you wnat to improve
check if 0 < t < 1 , in this way you know if the point lies on the ray,
if this check is valid, check for the point ot be contained inside the triangle

6475908f9503cf68fb9e462214ca4d73
0
elijah 101 Oct 09, 2009 at 13:32

I’m a bit confuse here. In the reply above

  1. “P0 it is the origin of the plane where the triangle is inscribed”
    Do you mean the center point of the triangle ? Or the center point of the shape. Inscribed means is a point inside the Triangle.

  2. “P0 first point of the triangle”
    Do you mean is the first Vertex Point out of the three vertex point that forms a triangle.

It would be great if you could post the code for me to learn.

Ceee4d1295c32a0c1c08a9eae8c9459d
0
v71 105 Oct 09, 2009 at 13:36

Assume you have a triangle , composed by 3 vertices , P0,P1,P2
the N vector is the cross product of 2 vectors namely U and V
U = P1-P0 and V=P2-P0;
in that function i assume that N is already computed
so , that you have a plane where this triangle lies in , P0 is a point on this plane and N is its normal.

6475908f9503cf68fb9e462214ca4d73
0
elijah 101 Oct 09, 2009 at 14:40

Thank You very much for your help. I will implement and try it out