nuclear@4: #include "opengl.h" nuclear@4: #include "light.h" nuclear@4: nuclear@4: Light::Light(const Color &col) nuclear@4: : color(col) nuclear@4: { nuclear@4: intensity = 1.0; nuclear@4: } nuclear@4: nuclear@4: Light::~Light() {} nuclear@4: nuclear@4: void Light::set_intensity(float val) nuclear@4: { nuclear@4: intensity = val; nuclear@4: } nuclear@4: nuclear@4: void Light::set_color(const Color &col) nuclear@4: { nuclear@4: color = col; nuclear@4: } nuclear@4: nuclear@4: void Light::use(int id) const nuclear@4: { nuclear@4: glLightfv(GL_LIGHT0 + id, GL_DIFFUSE, &color.x); nuclear@4: glLightfv(GL_LIGHT0 + id, GL_SPECULAR, &color.x); nuclear@4: } nuclear@4: nuclear@4: nuclear@4: PointLight::PointLight() nuclear@4: { nuclear@4: atten[0] = 1.0f; nuclear@4: atten[1] = 0.0f; nuclear@4: atten[2] = 0.0f; nuclear@4: } nuclear@4: nuclear@4: PointLight::PointLight(const Vector3 &pos, const Color &col) nuclear@4: : Light(col) nuclear@4: { nuclear@4: this->pos = pos; nuclear@4: atten[0] = 1.0f; nuclear@4: atten[1] = 0.0f; nuclear@4: atten[2] = 0.0f; nuclear@4: } nuclear@4: nuclear@4: void PointLight::set_position(const Vector3 &pos) nuclear@4: { nuclear@4: this->pos = pos; nuclear@4: } nuclear@4: nuclear@4: void PointLight::set_attenuation(float att_const, float att_lin, float att_quad) nuclear@4: { nuclear@4: atten[0] = att_const; nuclear@4: atten[1] = att_lin; nuclear@4: atten[2] = att_quad; nuclear@4: } nuclear@4: nuclear@4: void PointLight::use(int id) const nuclear@4: { nuclear@4: float lpos[] = {pos.x, pos.y, pos.z, 1.0f}; nuclear@4: glLightfv(GL_LIGHT0 + id, GL_POSITION, lpos); nuclear@4: glLightf(GL_LIGHT0 + id, GL_CONSTANT_ATTENUATION, atten[0]); nuclear@4: glLightf(GL_LIGHT0 + id, GL_LINEAR_ATTENUATION, atten[1]); nuclear@4: glLightf(GL_LIGHT0 + id, GL_QUADRATIC_ATTENUATION, atten[2]); nuclear@4: } nuclear@4: nuclear@4: nuclear@4: void set_light(int id, const Light *lt) nuclear@4: { nuclear@4: if(lt) { nuclear@4: glDisable(GL_LIGHT0 + id); nuclear@4: } else { nuclear@4: glEnable(GL_LIGHT0 + id); nuclear@4: lt->use(id); nuclear@4: } nuclear@4: }