PDA

View Full Version : Is using selection buffer for selection or picking slow?

Fastian
04-11-2001, 01:49 AM
Hi,

I was wondering is using selection buffer slow and if so, what are the alternatives?

Michael Steinberg
04-11-2001, 01:52 AM
AFAIK nvidia cards switch to software mode when using these rendering modes. The fastes probably is that you do your own ray intersection test.

KurtCob
04-11-2001, 02:15 AM
Hi Michael,

The people always said that the best mode is the ray intersection, but I always asked how to do this, and they never answered, could you explain me how to do this ?

Tnks
Best RGDS

Kurt

Fastian
04-11-2001, 02:19 AM
Well i think I agree with kurt, can you explain a bit?

Michael Steinberg
04-11-2001, 02:49 AM
Let a line and a plane intersect.
There are different attempts doing that.

Here's one way (dunno):

int LinePlaneIntersect( CVector&amp; a, CVector&amp; b, CPlane&amp; plane, CVector&amp; result )
{
double quot, t;
plane.normal.Normalize();

t = (plane.place-a)*plane.normal;
quot = b*plane.normal;

if( DOUBLE_EQ( quot, 0.0 ) ) {
printf("\n quotient is zero!");
if( DOUBLE_EQ( t, 0.0 ) ) return LPI_INSIDE;
else return LPI_PARALLEL;
}

printf( "\n t is %f", t );

t = t/quot;

result = a+b*t;

return LPI_CUT;
}

On the other hand you'd have to test wether the intersection lies on the poly. Either test wether the line lies inside the convex hull of the pyramid built from a point on the line and the polygon edges, or use a different approach.

The plane:
vx = va + r*vb + t*vc

where va is a vector to a point on the plane (it's place vector), vb and vc are the span-vectors which actually build the plane.

The line:

vx = vd + u*ve

Now say

vd + u*ve = va + r*vb + t*vc

and solve the resulting equation system.

if r+t <= 1 and both are positive you've got an intersection inside the triangle with the egdes vb, vc and vc-vb displaced about va. Well you probably know what I mean.

[This message has been edited by Michael Steinberg (edited 04-11-2001).]

Fastian
04-11-2001, 02:56 AM
Thnx man