class Frustum3D
{
public:
// Create perspective frustum, same format as gluPerspective()
void init(float fFov, float fAspect,
float fNear, float fFar);
// Set frustum to camera position, orientation
void setFrustum(geoGL::Camera3D &camera);
// Return true if a sphere is within view frustum
bool visible(const geoGL::fVector3D &point3D, float fRadius);
// Return true if 3D object within view frustum
bool visible(const ObjectSet3D &objSet);
private:
// Names of 6 sides to view frustum
enum FrustumList ;
// Information about view frustum
geoGL::fVector3D vFrustum [NUM_FRUSTUM]; // 6 frustum planes at origin
geoGL::fVector3D vRotFrustum[NUM_FRUSTUM]; // 6 frustum planes translated & rotated
float fFrustumD [NUM_FRUSTUM]; // Distance to each of 6 frustum planes
geoGL::fVector3D vTranslate; // Current position of view frustum
// Set frustum position and orientation manually
void rotateFrustum(const fMatrix4x4 &rotateMatrix);
void translateFrustum(const fVector3D &trans);
// Compute distance of frustum plane from point
float distance(FrustumList which, const geoGL::fVector3D &point3D);
};