I am using OpenGL and trying to culling spheres against the frustum... When I rotate around with the camera objects that should be on screen aren't and sometimes they are.
So I am not sure what is wrong, but with the planes normalized, I am assuming I need to pass in a normalized center point of the sphere?
Frustum culling against a sphere
Started by MARS_999, Jun 17 2012 07:49 PM
6 replies to this topic
Ad:
#3 GDNet+ - Reputation: 820
Posted 17 June 2012 - 08:03 PM
inline bool SphereInFrustum(const cml::vector<T, cml::fixed<3>>& sc, T radius)
{
for(int i = 0; i < PLANE_TOTAL; ++i)
{
T dist = planes[i][0] * sc[0] +
planes[i][1] * sc[1] +
planes[i][2] * sc[2] +
planes[i][3];
if(dist <= -radius)
return false;
}
return true;
}
inline void Update(void)
{
glGetFloatv(GL_PROJECTION_MATRIX, projection.data());
glGetFloatv(GL_MODELVIEW_MATRIX, modelview.data());
mvp = projection * modelview;
cml::extract_frustum_planes(mvp, planes, cml::z_clip_neg_one, true);
cml::get_frustum_corners(planes, corners);
}
if(frustum.SphereInFrustum((*it)->GetBoundingSphere().s.center, (*it)->GetBoundingSphere().s.radius))
{
}
#4 Members - Reputation: 1006
Posted 17 June 2012 - 08:07 PM
It depends upon whether you are doing the frustrum culling yourself or using some API to do the culling. A built-in API which takes whole objects or polygons should be smart enough to take care of it. If you're doing it yourself, you need to ensure that you draw an object if any part of it could appear on-screen. Sometimes this is done by testing if any part of a bounding box is within the frustrum.
From a quick Google I found an example:
http://www.flipcode.com/archives/Frustum_Culling.shtml
Under "Fundamental Methods 1" it shows an example for a sphere and an axis-aligned box.
From a quick Google I found an example:
http://www.flipcode.com/archives/Frustum_Culling.shtml
Under "Fundamental Methods 1" it shows an example for a sphere and an axis-aligned box.






