Fixed attenuation for lights.

This commit is contained in:
Tleety
2014-05-11 00:02:34 +02:00
parent c1c30b0019
commit 22d855a521
8 changed files with 50 additions and 31 deletions
+2 -2
View File
@@ -16,10 +16,10 @@ out vec4 frag_Normal;
void main()
{
// Diffuse Texture
frag_Diffuse = texture2D(DiffuseTexture, Input.TextureCoord);
frag_Diffuse = texture(DiffuseTexture, Input.TextureCoord);
// G-buffer Position
frag_Position = vec4(Input.Position.xyz, 0.0);
frag_Position = vec4(Input.Position.xyz, 1.0);
// G-buffer Normal
frag_Normal = vec4(Input.Normal, 0.0);
+13 -6
View File
@@ -12,15 +12,19 @@ uniform vec3 la;
uniform vec3 ls;
uniform vec3 ld;
uniform vec3 lp;
uniform float LightRadius;
uniform float specularExponent;
uniform vec3 CameraPosition;
uniform float ConstantAttenuation;
uniform float LinearAttenuation;
uniform float QuadraticAttenuation;
const vec3 ks = vec3(1.0, 1.0, 1.0);
const vec3 kd = vec3(1.0, 1.0, 1.0);
const vec3 ka = vec3(1.0, 1.0, 1.0);
const float kshine = 1.0;
in VertexData
{
vec3 Position;
@@ -44,12 +48,15 @@ vec4 phong(vec3 position, vec3 normal)
vec3 surfaceToViewer = normalize(-position);
vec3 halfWay = normalize(surfaceToViewer + directionToLight);
float dotSpecular = max(dot(halfWay, normal), 0.0);
float specularFactor = pow(dotSpecular, specularExponent * 2);
float specularFactor = pow(dotSpecular, specularExponent * 2.0);
vec3 Is = ks * ls * specularFactor;
//Attenuation
float dist = distance(lightPos, position);
float attenuation = -log(min(1.0, dist / LightRadius));
//float attenuation = -log(min(1.0, dist / LightRadius));
float attenuation = 1.0 / (ConstantAttenuation + (LinearAttenuation * dist) + (QuadraticAttenuation * dist * dist));
//float attenuation = 1.0 / (1.0 - 0.0001 * pow(dist, 2));
//float attenuation = clamp(0.0, 1.0, 1.0 / (0.001 + (0.001 * dist) + (0.001 * dist * dist)));
@@ -62,9 +69,9 @@ vec4 phong(vec3 position, vec3 normal)
//att_s = 1.0 / (1.0 + att_s);
//attenuation = attenuation / (1.0 - att_s);
float radius = 5.0;
float alpha = dist / radius;
float dampingFactor = 1.0 - pow(alpha, 3);
//float radius = 5.0;
//float alpha = dist / radius;
//float dampingFactor = 1.0 - pow(alpha, 3);
return vec4((Id + Is) * attenuation, 1.0);
+1 -1
View File
@@ -15,5 +15,5 @@ void main()
{
gl_Position = MVP * vec4(Position, 1.0);
Output.Position = Position;
Output.TextureCoord = (vec2(Position) + 1) / 2;
Output.TextureCoord = (vec2(Position) + 1.0) / 2.0;
}