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 );
}