[ODE] A trimesh-as-view-frustum question

gl gl at ntlworld.com
Thu May 6 21:06:40 MST 2004


Far too much work.  You can extract your camera's view frustum planes
quickly using this:
http://www2.ravensoft.com/users/ggribb/plane%20extraction.pdf

Then you test eg. AABBs against the frustum's planes:

 // Initialize the intersection indicator.
 vec3 min_extreme, max_extreme;
 bool intersect = false;

 // For each of the six frustum planes
 for (int i=0; i<6; i++)
  {
  // Find the minimum and maximum extreme points along the plane's
  // normal vec3. Just understand this normal as a line of all
  // real numbers. 0 then lies on the plane, negative numbers are
  // in the halfspace opposing the normal, and positive numbers
  // are in the other halfspace. The terms "minimum" and "maximum"
  // should now make sense.
  // for each component x, y, and z:
  if (Plane[i].Normal().x >= 0.0f)
   {
   min_extreme.x = b.min.x;
   max_extreme.x = b.max.x;
   }
  else{
   min_extreme.x = b.max.x;
   max_extreme.x = b.min.x;
   }
  if (Plane[i].Normal().y >= 0.0f)
   {
   min_extreme.y = b.min.y;
   max_extreme.y = b.max.y;
   }
  else{
   min_extreme.y = b.max.y;
   max_extreme.y = b.min.y;
   }
  if (Plane[i].Normal().z >= 0.0f)
   {
   min_extreme.z = b.min.z;
   max_extreme.z = b.max.z;
   }
  else{
   min_extreme.z = b.max.z;
   max_extreme.z = b.min.z;
   }

  // If minimum extreme point is outside, then the whole AABB
  // must be outside.
  if (Plane[i].DistanceTo(min_extreme) >= 0.0f)
   return FULLY_OUTSIDE;

  // The minimum extreme point is inside. Hence, if the maximum
  // extreme point is outside, then the AABB must intersect with
  // the plane. However, the AABB may still be outside another
  // plane.
  if (Plane[i].DistanceTo(max_extreme) >= 0.0f)
   intersect = true;
  }

 // The AABB is either partially or fully visible.
 return intersect? PARTIALLY_CONTAINED : FULLY_CONTAINED;
--
gl

----- Original Message ----- 
From: "Shamyl Zakariya" <zakariya at earthlink.net>
To: <ode at q12.org>
Sent: Thursday, May 06, 2004 6:17 PM
Subject: [ODE] A trimesh-as-view-frustum question


> I have a couple quick questions about OPCODE.
>
> First, if I were to have a large geom, say a cone or a pyramidical
> section described as a trimesh, would OPCODE detect when an object is
> completely inside? Or does OPCODE only detect intersection with the
> surface triangles?
>
> Second, if the first is true, I'd like to know what your collective
> thoughts are on using a trimesh view-frustum for visibility
> determination. As in, if I had a trimesh corresponding to my view
> frustum with my camera's position and orientation moving and orienting
> the trimesh, would it be an effective way to determine which objects in
> my simulation are visible?
>
> As I write this, I seem to recall that there are ( or were ) problems
> with moving trimeshes -- it that still the case?
>
> I'm just curious. My simulation has a fairly rich environment so my
> simulated robots have a lot to interact with. But my laptop is a fairly
> anemic 800mhz powerbook, so while I've put a lot of work into
> optimizing my OpenGL calls, it would speed things up significantly to
> be able to only draw those objects which are visible, and that of
> course would leave more cycles to my AI. But since the AI work is more
> important than the visualization I wouldn't want to spend an inordinate
> amount of time on a *real* visibility determination system. The
> view-frustum as a trimesh geom approach seems like it would be fairly
> easy to implement, providing of course that it would work ;)
>
>
> shamyl zakariya :: lorem ipsum dolor sit amet,
>
> _______________________________________________
> ODE mailing list
> ODE at q12.org
> http://q12.org/mailman/listinfo/ode
>



More information about the ODE mailing list