void shadowTransform( float n[], float light[] )
{
    float m[16];
    float k = n[0] * light[0] + n[1] * light[1]
            + n[2] * light[2] + n[3] * light[3];

    for ( int i = 0; i < 4; i++ )
    {
        for ( int j = 0; j < 4; j++ )
        {
            m[4*i+j] = -n[i] * light[j];
        }
        m[5*i] += k; // add k to diagonal entries
    }
    glMultMatrixf( m );
}