Jump to content

  • Log In with Google      Sign In   
  • Create Account

using a line to pick objects


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
5 replies to this topic

#1 Knight52   Members   -  Reputation: 171

Like
0Likes
Like

Posted 26 December 2012 - 05:19 AM

I have a line on 2d screen. I want to know which 3d objects the line is on. It's a straight line. Anyone knows how to do it?

 

I'm trying to create a plane out of it and use it to detect the collision. I have calculated 4 points for the plane's corner, but I don't know what should I do next.



Sponsor:

#2 Olof Hedman   Crossbones+   -  Reputation: 2824

Like
0Likes
Like

Posted 26 December 2012 - 05:25 AM

I'd use this: http://mathworld.wolfram.com/Point-PlaneDistance.html (Equation 10, signed distance) on the bounding box of the objects.

If any bounding box has mixed positive and negative distances for its corners, it's intersected by the plane

Edited by Olof Hedman, 26 December 2012 - 05:30 AM.


#3 Knight52   Members   -  Reputation: 171

Like
0Likes
Like

Posted 26 December 2012 - 07:39 AM

Just to be sure, is trapezoid considered a plane? And D3DXPlaneFromPoints which create plane from 3 vectors can be used to create trapezoid?



#4 Trienco   Crossbones+   -  Reputation: 2171

Like
1Likes
Like

Posted 27 December 2012 - 12:39 AM

Just to be sure, is trapezoid considered a plane?
A plane is infinite and therefore has no "shape" (unless you consider being flat a shape). A trapezoid has its name because of it's shape. So no, it's not a plane, but it is _on_ a plane.

For above reasons a plane doesn't have "corners" either, you simply need to have three points to define a plane.

You can use a plane to quickly filter out all objects that aren't intersecting the plane your trapezoid is on, but you still need to check if they are actually inside or intersecting the actual shape. The easiest way I could think of is to do 4 more plane tests for each edge of your shape to see if an object either intersects or is inside.

So basically it's exactly the same as frustum culling, except that you have a special case where the top and bottom plane of the view frustum happen to be the same. You could safe yourself one of the 6 plane checks (top and bottom are the same, there is no "inside" in that dimension and so the result of checking for objects "between" top and bottom is the same as objects intersecting either).

If you already have code that does frustum culling, I'd probably not even waste time to write any new code for this particular special case and just use that instead.

Edited by Trienco, 27 December 2012 - 12:39 AM.

f@dzhttp://festini.device-zero.de

#5 Olof Hedman   Crossbones+   -  Reputation: 2824

Like
0Likes
Like

Posted 27 December 2012 - 06:29 AM


[...] you simply need to have three points to define a plane.

You only need one point, and a normal to define a plane, but I agree with everything else :)

Edited by Olof Hedman, 27 December 2012 - 06:30 AM.


#6 Trienco   Crossbones+   -  Reputation: 2171

Like
0Likes
Like

Posted 28 December 2012 - 11:45 AM


[...] you simply need to have three points to define a plane.
You only need one point, and a normal to define a plane, but I agree with everything else smile.png

 

To be nitpicky, you can also get away with just a normal and a distance from the origin. Though in this particular case of using D3DXPlaneFromPoints you are going to need three points and they better don't all lie on a single line.


f@dzhttp://festini.device-zero.de




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS