Code:
void Frustum::Calculate( D3DXMATRIX *lpMatView, D3DXMATRIX *lpMatProj )
{
D3DXMATRIX matClip;
D3DXMatrixMultiply( &matClip, lpMatView, lpMatProj);
D3DXMatrixInverse( &matClip, NULL, &matClip );
// Use unit extents at first
vertices[0] = D3DXVECTOR3(-1.0f, -1.0f, 0.0f);
vertices[1] = D3DXVECTOR3( 1.0f, -1.0f, 0.0f);
vertices[2] = D3DXVECTOR3(-1.0f, 1.0f, 0.0f);
vertices[3] = D3DXVECTOR3( 1.0f, 1.0f, 0.0f);
vertices[4] = D3DXVECTOR3(-1.0f, -1.0f, 1.0f);
vertices[5] = D3DXVECTOR3( 1.0f, -1.0f, 1.0f);
vertices[6] = D3DXVECTOR3(-1.0f, 1.0f, 1.0f);
vertices[7] = D3DXVECTOR3( 1.0f, 1.0f, 1.0f);
// Transform unit extents by inverse clip matrix
for( int i = 0; i < 8; ++i )
D3DXVec3TransformCoord( &vertices[i], &vertices[i], &matClip );
// Calculate the planes of the frustum from the given extents
D3DXPlaneFromPoints( &planes[0], &vertices[0], &vertices[1], &vertices[2] );
D3DXPlaneFromPoints( &planes[1], &vertices[6], &vertices[7], &vertices[5] );
D3DXPlaneFromPoints( &planes[2], &vertices[2], &vertices[6], &vertices[4] );
D3DXPlaneFromPoints( &planes[3], &vertices[7], &vertices[3], &vertices[5] );
D3DXPlaneFromPoints( &planes[4], &vertices[2], &vertices[3], &vertices[6] );
D3DXPlaneFromPoints( &planes[5], &vertices[1], &vertices[0], &vertices[4] );
}