Re: [Algorithms] visualizing frustum planes?
Brought to you by:
vexxed72
From: Jim O. <j.o...@in...> - 2000-08-21 17:22:51
|
Hey, Here's a piece of code which will render the camera frustum, which I find to be useful when hunting camera problems. It works best when viewed from a second camera though (since the frustum is mostly clipped by the very frustum planes it is meant to visualize), with the AABB culling code (or whatever you may end up using it for) hardwired to the first camera - only, the second camera should just render everything, or only rely on culling code of which you're certain that it works. ----8<---- float ax, ay, bx, by, fx, fy; static Vertex verts[8]; static ushort indices[24] = { 0,1, 1,2, 2,3, 3,0, 4,5, 5,6, 6,7, 7,4, 0,4, 1,5, 2,6, 3,7 }; // Calculate fov/2 angles in x and y direction. ax = mFov / 2; ay = ax * ((float) mViewport.height / (float) mViewport.width); // Calculate x/y coordinates of the front plane. fx = mFront * (float) tan(ax); fy = mFront * (float) tan(ay); // Calculate x/y coordinates of the back plane. bx = mBack * (float) tan(ax); by = mBack * (float) tan(ay); // Setup frustum verts. verts[0].loc.set(-fx, +fy, mFront); verts[1].loc.set(+fx, +fy, mFront); verts[2].loc.set(+fx, -fy, mFront); verts[3].loc.set(-fx, -fy, mFront); verts[4].loc.set(-bx, +by, mBack); verts[5].loc.set(+bx, +by, mBack); verts[6].loc.set(+bx, -by, mBack); verts[7].loc.set(-bx, -by, mBack); for (short i = 0; i < 8; i++) verts[i].color = Color3(0.8f, 0.8f, 0.8f); // Render frustum. GfxDevice->SetTransform(eTransformWorld, mMatrix); GfxDevice->Draw(GfxDevice::PrimLineList, verts, 8, indices, 24); ----8<---- If you have any questions about the specifics of the above code, mail me offline. HTH Jim Offerman Innovade - designing the designer ----- Original Message ----- From: "Michael S. Harrison" <mic...@ud...> To: <gda...@li...> Sent: Monday, August 21, 2000 9:18 AM Subject: [Algorithms] visualizing frustum planes? > I'm attempting to implement the AABB culling code talked about here some time ago and I'm running into a general problem in visualizing the frustum planes used to cull objects based on their AABB's > > I'm using both Klaus Hartmann's AABBCull sample and the Viewcull sample included with the OpenGL FAQ. > > While the code generally works, I'm having some difficulty visualizing the relationship between the plane vector and the "distance" value stored with it, which I'm sure is the reason I can't quite figure out why the code generates intersection results when it should generate a full cull. > > As you might guess, I'm fairly new to the world of 3d projection and I'm still wrapping my mind around all the transformations that take an object from "world" space to screen space. > > Can anyone suggest a reference or way to visualize exactly what's going on with the plane extraction and how the vectors relate back to the AABB? > > > _______________________________________________ > GDAlgorithms-list mailing list > GDA...@li... > http://lists.sourceforge.net/mailman/listinfo/gdalgorithms-list > |