nuclear@1: #include "light.h" nuclear@1: nuclear@1: Light::Light() nuclear@1: { nuclear@12: type = NODE_LIGHT; nuclear@17: intens = 1.0; nuclear@1: color.x = color.y = color.z = 1.0; nuclear@1: atten.x = 1.0; nuclear@1: atten.y = 0.0; nuclear@1: atten.z = 0.0; nuclear@1: } nuclear@1: nuclear@17: void Light::set_intensity(float val) nuclear@17: { nuclear@17: intens = val; nuclear@17: } nuclear@17: nuclear@17: float Light::get_intensity() const nuclear@17: { nuclear@17: return intens; nuclear@17: } nuclear@17: nuclear@1: void Light::set_color(const Vector3 &color) nuclear@1: { nuclear@1: this->color = color; nuclear@1: } nuclear@1: nuclear@1: const Vector3 &Light::get_color() const nuclear@1: { nuclear@1: return color; nuclear@1: } nuclear@1: nuclear@17: Vector3 Light::get_color(const Vector3 &pt) const nuclear@17: { nuclear@17: float d = (get_position() - pt).length(); nuclear@17: return color * calc_attenuation(d) * intens; nuclear@17: } nuclear@1: nuclear@1: void Light::set_attenuation(const Vector3 &atten) nuclear@1: { nuclear@1: this->atten = atten; nuclear@1: } nuclear@1: nuclear@1: const Vector3 &Light::get_attenuation() const nuclear@1: { nuclear@1: return atten; nuclear@1: } nuclear@12: nuclear@17: float Light::calc_attenuation(float d) const nuclear@17: { nuclear@17: float denom = atten.x + atten.y * d + atten.z * d * d; nuclear@17: float at = denom == 0.0 ? 1.0 : 1.0 / denom; nuclear@17: return at > 1.0 ? 1.0 : at; nuclear@17: } nuclear@17: nuclear@18: void Light::draw(bool emph) const nuclear@12: { nuclear@12: } nuclear@12: nuclear@17: bool Light::intersect(const Ray &ray, RayHit *hit) const nuclear@12: { nuclear@17: return false; // TODO nuclear@12: }