X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Flight.cpp;fp=source%2Flight.cpp;h=b523fe365124e9c8f52cba0bd4c9edbbaa8e2f07;hp=899e22c9853d964ed7c0a591d4585cbfb2591c0c;hb=41339bc44d076569c680b2c24c75b30ef1254c1b;hpb=c112952f156b4ccb820568bca1fd1c59966f708e diff --git a/source/light.cpp b/source/light.cpp index 899e22c9..b523fe36 100644 --- a/source/light.cpp +++ b/source/light.cpp @@ -18,11 +18,15 @@ Light::Light(): ambient(0), diffuse(1), specular(1), - x(0), y(0), z(1), w(0), - sdx(0), sdy(0), sdz(-1), + position(0, 0, 1, 0), + spot_dir(0, 0, -1), spot_exp(0), spot_cutoff(180) -{ } +{ + attenuation[0]=1; + attenuation[1]=0; + attenuation[2]=0; +} void Light::set_ambient(const Color &c) { @@ -39,12 +43,31 @@ void Light::set_specular(const Color &c) specular=c; } -void Light::set_position(float x_, float y_, float z_, float w_) +void Light::set_position(const Vector4 &p) +{ + position=p; +} + +void Light::set_spot_direction(const Vector3 &d) +{ + spot_dir=d; +} + +void Light::set_spot_exponent(float e) +{ + spot_exp=e; +} + +void Light::set_spot_cutoff(float c) +{ + spot_cutoff=c; +} + +void Light::set_attenuation(float c, float l, float q) { - x=x_; - y=y_; - z=z_; - w=w_; + attenuation[0]=c; + attenuation[1]=l; + attenuation[2]=q; } void Light::bind() const @@ -56,7 +79,13 @@ void Light::bind() const glLightfv(l, GL_AMBIENT, &ambient.r); glLightfv(l, GL_DIFFUSE, &diffuse.r); glLightfv(l, GL_SPECULAR, &specular.r); - glLightfv(l, GL_POSITION, &x); + glLightfv(l, GL_POSITION, &position.x); + glLightfv(l, GL_SPOT_DIRECTION, &spot_dir.x); + glLightf(l, GL_SPOT_EXPONENT, spot_exp); + glLightf(l, GL_SPOT_CUTOFF, spot_cutoff); + glLightf(l, GL_CONSTANT_ATTENUATION, attenuation[0]); + glLightf(l, GL_LINEAR_ATTENUATION, attenuation[1]); + glLightf(l, GL_QUADRATIC_ATTENUATION, attenuation[2]); current_lights[current_unit]=this; } }