Frustum

Description: Frustum creation/clipping

Source file: …\genesis3d\OpenSource\Source\World\FRUSTUM.h

Contents:

Functions: SetFromCamera, SetFromPoly, RotateToWorldSpace, TransformToWorldSpace, ClipVertsFannedUVRGB, ClipToPlane, ClipToPlaneUV, ClipToPlaneUVRGB, ClipToPlaneUVRGBA, ClipToPlaneRGB, ClipToPlaneL, Project, ProjectRGB, ProjectRGBA, ProjectRGBNoClamp, PointsInFrustum, PointInFrustum, ClipAllPlanesL

Types: Frustum_Info

Constants: view

Additions for Genesis3D v1.6: None

Note: view  

Constants:

#define MAX_FCP     32      // Max ClipPlanes for frustum...

 #define CLIP_PLANE_EPSILON 0.001f

 Return to Contents

 Types:

Frustum_Info:

typedef struct Frustum_Info {
     int32                            NumPlanes;        // Number of frustum planes to clip against
     GFX_Plane                 Planes[MAX_FCP];           // Planes to clip against
     // Quick LUTS For BBox testing against frustum
     int32                            FrustumBBoxIndexes[MAX_FCP*6];
     int32*                          pFrustumBBoxIndexes[MAX_FCP];
} Frustum_Info;
Return to Contents

Functions:

void Frustum_SetFromCamera(Frustum_Info* Info, geCamera* Camera);

Return to Contents

geBoolean Frustum_SetFromPoly(Frustum_Info* Info, geVec3d* Verts, int32 NumVerts, geBoolean Flip);

Return to Contents

void Frustum_RotateToWorldSpace(Frustum_Info* In, geCamera* Camera, Frustum_Info* Out);

Return to Contents

void Frustum_TransformToWorldSpace(const Frustum_Info* In, const geCamera* Camera, Frustum_Info* Out);

Return to Contents

geBoolean gePlane_ClipVertsFannedUVRGB(const geVec3d* In, const Surf_TexVert* TIn, int32 NumIn, const GFX_Plane* Plane, geVec3d* Out, Surf_TexVert* TOut, int32* NumOut);

Return to Contents

geBoolean Frustum_ClipToPlane(GFX_Plane* pPlane, geVec3d* pIn, geVec3d* pOut, int32 NumVerts, int32* OutVerts);

Return to Contents

geBoolean Frustum_ClipToPlaneUV(GFX_Plane* pPlane, geVec3d* pIn, geVec3d* pOut, Surf_TexVert* pTIn, Surf_TexVert* pTOut, int32 NumVerts, int32* OutVerts);

Return to Contents

geBoolean Frustum_ClipToPlaneUVRGB(GFX_Plane* pPlane, geVec3d* pIn, geVec3d* pOut, Surf_TexVert* pTIn, Surf_TexVert* pTOut, int32 NumVerts, int32* OutVerts);

Return to Contents

geBoolean Frustum_ClipToPlaneUVRGBA(GFX_Plane* pPlane, geVec3d* pIn, geVec3d* pOut, Surf_TexVert* pTIn, Surf_TexVert* pTOut, int32 NumVerts, int32* OutVerts);

Return to Contents

geBoolean Frustum_ClipToPlaneRGB(GFX_Plane* pPlane, geVec3d* pIn, geVec3d* pOut, Surf_TexVert* pTIn, Surf_TexVert* pTOut, int32 NumVerts, int32* OutVerts);

Return to Contents

geBoolean Frustum_ClipToPlaneL(GFX_Plane* pPlane, GE_LVertex* pIn, GE_LVertex* pOut, int32 NumVerts, int32* OutVerts);

// CB added

Return to Contents

void Frustum_Project(geVec3d* pIn, Surf_TexVert* pTIn, DRV_TLVertex* pOut, int32 NumVerts, const geCamera* Camera);

Return to Contents

void Frustum_ProjectRGB(geVec3d* pIn, Surf_TexVert* pTIn, DRV_TLVertex* pOut, int32 NumVerts, const geCamera* Camera);

Return to Contents

void Frustum_ProjectRGBA(geVec3d* pIn, Surf_TexVert* pTIn, DRV_TLVertex* pOut, int32 NumVerts, const geCamera* Camera);

Return to Contents

void Frustum_ProjectRGBNoClamp(geVec3d* pIn, Surf_TexVert* pTIn, DRV_TLVertex* pOut, int32 NumVerts, const geCamera* Camera);

Return to Contents

geBoolean Frustum_PointsInFrustum(const geVec3d* Pin, const GFX_Plane* Plane, int32 NumVerts, int32* c);

Return to Contents

geBoolean Frustum_PointInFrustum(const Frustum_Info* Fi, const geVec3d* Point, float Radius);

Return to Contents

geBoolean Frustum_ClipAllPlanesL(const Frustum_Info* Fi, uint32 ClipFlags, GE_LVertex* Verts, int32* pNumVerts);

Return to Contents

Notes:

What is a frustum? Here is a helpful web page I found that explaines the concept. It was originally written for the POVRay graphic engine, but the concept should be the same.

Return to Contents