All pastes #376036 Raw Edit

Something

public cpp v1 · immutable
#376036 ·published 2007-02-28 20:16 UTC
rendered paste body
void CTerrain::CalcFrustum(){    bool normalize = true;        CMatrix4 proj;        CMatrix4 modl;        CMatrix4 clip;       /* Get the current PROJECTION matrix from OpenGL */       glGetFloatv( GL_PROJECTION_MATRIX, proj.m );       /* Get the current MODELVIEW matrix from OpenGL */       glGetFloatv( GL_MODELVIEW_MATRIX, modl.m );       /* Combine the two matrices (multiply projection by modelview) */       clip.m[ 0] = modl.m[ 0] * proj.m[ 0] + modl.m[ 1] * proj.m[ 4] + modl.m[ 2] * proj.m[ 8] + modl.m[ 3] * proj.m[12];       clip.m[ 1] = modl.m[ 0] * proj.m[ 1] + modl.m[ 1] * proj.m[ 5] + modl.m[ 2] * proj.m[ 9] + modl.m[ 3] * proj.m[13];       clip.m[ 2] = modl.m[ 0] * proj.m[ 2] + modl.m[ 1] * proj.m[ 6] + modl.m[ 2] * proj.m[10] + modl.m[ 3] * proj.m[14];       clip.m[ 3] = modl.m[ 0] * proj.m[ 3] + modl.m[ 1] * proj.m[ 7] + modl.m[ 2] * proj.m[11] + modl.m[ 3] * proj.m[15];       clip.m[ 4] = modl.m[ 4] * proj.m[ 0] + modl.m[ 5] * proj.m[ 4] + modl.m[ 6] * proj.m[ 8] + modl.m[ 7] * proj.m[12];       clip.m[ 5] = modl.m[ 4] * proj.m[ 1] + modl.m[ 5] * proj.m[ 5] + modl.m[ 6] * proj.m[ 9] + modl.m[ 7] * proj.m[13];       clip.m[ 6] = modl.m[ 4] * proj.m[ 2] + modl.m[ 5] * proj.m[ 6] + modl.m[ 6] * proj.m[10] + modl.m[ 7] * proj.m[14];       clip.m[ 7] = modl.m[ 4] * proj.m[ 3] + modl.m[ 5] * proj.m[ 7] + modl.m[ 6] * proj.m[11] + modl.m[ 7] * proj.m[15];       clip.m[ 8] = modl.m[ 8] * proj.m[ 0] + modl.m[ 9] * proj.m[ 4] + modl.m[10] * proj.m[ 8] + modl.m[11] * proj.m[12];       clip.m[ 9] = modl.m[ 8] * proj.m[ 1] + modl.m[ 9] * proj.m[ 5] + modl.m[10] * proj.m[ 9] + modl.m[11] * proj.m[13];       clip.m[10] = modl.m[ 8] * proj.m[ 2] + modl.m[ 9] * proj.m[ 6] + modl.m[10] * proj.m[10] + modl.m[11] * proj.m[14];       clip.m[11] = modl.m[ 8] * proj.m[ 3] + modl.m[ 9] * proj.m[ 7] + modl.m[10] * proj.m[11] + modl.m[11] * proj.m[15];       clip.m[12] = modl.m[12] * proj.m[ 0] + modl.m[13] * proj.m[ 4] + modl.m[14] * proj.m[ 8] + modl.m[15] * proj.m[12];       clip.m[13] = modl.m[12] * proj.m[ 1] + modl.m[13] * proj.m[ 5] + modl.m[14] * proj.m[ 9] + modl.m[15] * proj.m[13];       clip.m[14] = modl.m[12] * proj.m[ 2] + modl.m[13] * proj.m[ 6] + modl.m[14] * proj.m[10] + modl.m[15] * proj.m[14];       clip.m[15] = modl.m[12] * proj.m[ 3] + modl.m[13] * proj.m[ 7] + modl.m[14] * proj.m[11] + modl.m[15] * proj.m[15];/* Extract the numbers for the RIGHT plane */   frustum[0].a = clip.m[ 3] - clip.m[ 0];   frustum[0].b = clip.m[ 7] - clip.m[ 4];   frustum[0].c = clip.m[11] - clip.m[ 8];   frustum[0].d = clip.m[15] - clip.m[12];   /* Extract the numbers for the LEFT plane */   frustum[1].a = clip.m[ 3] + clip.m[ 0];   frustum[1].b = clip.m[ 7] + clip.m[ 4];   frustum[1].c = clip.m[11] + clip.m[ 8];   frustum[1].d = clip.m[15] + clip.m[12];   /* Extract the BOTTOM plane */   frustum[2].a = clip.m[ 3] + clip.m[ 1];   frustum[2].b = clip.m[ 7] + clip.m[ 5];   frustum[2].c = clip.m[11] + clip.m[ 9];   frustum[2].d = clip.m[15] + clip.m[13];   /* Extract the TOP plane */   frustum[3].a = clip.m[ 3] - clip.m[ 1];   frustum[3].b = clip.m[ 7] - clip.m[ 5];   frustum[3].c = clip.m[11] - clip.m[ 9];   frustum[3].d = clip.m[15] - clip.m[13];   /* Extract the FAR plane */   frustum[4].a = clip.m[ 3] - clip.m[ 2];   frustum[4].b = clip.m[ 7] - clip.m[ 6];   frustum[4].c = clip.m[11] - clip.m[10];   frustum[4].d = clip.m[15] - clip.m[14];   /* Extract the NEAR plane */   frustum[5].a = clip.m[ 3] + clip.m[ 2];   frustum[5].b = clip.m[ 7] + clip.m[ 6];   frustum[5].c = clip.m[11] + clip.m[10];   frustum[5].d = clip.m[15] + clip.m[14];    if (normalize == true)    {        for (int i=0;i<6;i++)            frustum[i].normalize();    };}