Toom

12-01-2000, 12:14 PM

Before I go and turn my pages of hand-written notes into code, can anyone comment on this and let me know if I'm on the right track?

I need to test a bounding box against the current view frustum. I don't need to differentiate between boxes that are *partially* in the frustum and *totally* in the frustum, they can either be rejected completely or they need further processing. Speed is, of course, of the essence.

So... here's what I've come up with. I know how to code all this, I just want to know if it makes sense to you experts.

- I extract the equations for the 6 planes of the frustum from a concatenation of the current projection and modelview matrices. I only do this if/when the "camera" moves.

- Given a bounding box with 8 vertices, I loop through all 6 planes doing the following:

- Loop through the 8 vertices, calculating the distance of the vertex from the plane. A positive distance means it's in front of the plane (or outside of the frustum) while a negative value means it's behind the plane (possibly inside the frustum). If I find a vertex that is behind the plane, then I can refrain from testing the remaining vertices (if any) because at least some part of the bounding box is behind the plane.

- If all 8 vertices are in front of any of the six planes, then I can refrain from testing against the remaining planes because it's totally outside the frustum.

- If, for each plane, at least one vertex is behind the plane, then some portion of the box is visible and it cannot be rejected.

Does this sound about right?

Testing a bounding sphere would be similar, faster in fact, since I only have to test a single point and compare the distance from the plane to the sphere's radius.

Toom

[This message has been edited by Toom (edited 12-01-2000).]

I need to test a bounding box against the current view frustum. I don't need to differentiate between boxes that are *partially* in the frustum and *totally* in the frustum, they can either be rejected completely or they need further processing. Speed is, of course, of the essence.

So... here's what I've come up with. I know how to code all this, I just want to know if it makes sense to you experts.

- I extract the equations for the 6 planes of the frustum from a concatenation of the current projection and modelview matrices. I only do this if/when the "camera" moves.

- Given a bounding box with 8 vertices, I loop through all 6 planes doing the following:

- Loop through the 8 vertices, calculating the distance of the vertex from the plane. A positive distance means it's in front of the plane (or outside of the frustum) while a negative value means it's behind the plane (possibly inside the frustum). If I find a vertex that is behind the plane, then I can refrain from testing the remaining vertices (if any) because at least some part of the bounding box is behind the plane.

- If all 8 vertices are in front of any of the six planes, then I can refrain from testing against the remaining planes because it's totally outside the frustum.

- If, for each plane, at least one vertex is behind the plane, then some portion of the box is visible and it cannot be rejected.

Does this sound about right?

Testing a bounding sphere would be similar, faster in fact, since I only have to test a single point and compare the distance from the plane to the sphere's radius.

Toom

[This message has been edited by Toom (edited 12-01-2000).]