- index = unit->get_index();
- }
-
- GLenum l = GL_LIGHT0+index;
- if(mask&DIFFUSE)
- glLightfv(l, GL_DIFFUSE, &diffuse.r);
- if(mask&SPECULAR)
- glLightfv(l, GL_SPECULAR, &specular.r);
- if(mask&POSITION)
- glLightfv(l, GL_POSITION, &position.x);
- if(mask&SPOT_DIR)
- glLightfv(l, GL_SPOT_DIRECTION, &spot_dir.x);
- if(mask&SPOT_EXP)
- glLightf(l, GL_SPOT_EXPONENT, spot_exp);
- if(mask&SPOT_CUTOFF)
- glLightf(l, GL_SPOT_CUTOFF, spot_cutoff.degrees());
- if(mask&ATTENUATION)
- {
- glLightf(l, GL_CONSTANT_ATTENUATION, attenuation[0]);
- glLightf(l, GL_LINEAR_ATTENUATION, attenuation[1]);
- glLightf(l, GL_QUADRATIC_ATTENUATION, attenuation[2]);
- }
+ Vector4 columns[4];
+ columns[0] = compose(right_dir, 0.0f);
+ columns[1] = compose(cross(right_dir, direction), 0.0f);
+ columns[2] = compose(-direction, 0.0f);
+ columns[3] = position;
+ matrix = Matrix::from_columns(columns);