rendered paste bodyvoid 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(); };}