diff --git a/SMCode/SM2D/Light/LightObjects/PointLight.cs b/SMCode/SM2D/Light/LightObjects/PointLight.cs index 8721103..8042983 100644 --- a/SMCode/SM2D/Light/LightObjects/PointLight.cs +++ b/SMCode/SM2D/Light/LightObjects/PointLight.cs @@ -1,7 +1,19 @@ -namespace SM2D.Light +using System.Collections.Generic; +using SM.OGL.Shaders; + +namespace SM2D.Light { public class PointLight : LightObject { internal override int Type { get; } = 0; + + public float Power = 5; + + internal override void SetUniforms(Dictionary uniforms) + { + base.SetUniforms(uniforms); + + uniforms["Power"].SetUniform1(Power); + } } } \ No newline at end of file diff --git a/SMCode/SM2D/Light/light.frag b/SMCode/SM2D/Light/light.frag index 3197ca6..7b01fd9 100644 --- a/SMCode/SM2D/Light/light.frag +++ b/SMCode/SM2D/Light/light.frag @@ -5,6 +5,9 @@ struct Light { int Type; vec2 Position; vec4 Color; + + // pointStuff; + float Power; }; in vec2 vTexture; @@ -19,10 +22,12 @@ layout(location = 0) out vec4 color; vec4 GetRenderColor(); vec3 calcPointLight(Light light) { - float dis = distance(FragPos, light.Position); - float intensity = 4 / 4 * PI * pow(dis, 2); - - return vec3(light.Color * intensity); + vec2 diff = light.Position - FragPos; + + float dif = light.Power / length(diff); + float intensity = 4 * PI * dif * (dif * dif); + + return vec3(intensity); } vec3 calcLight() { @@ -42,6 +47,9 @@ vec3 calcLight() { } void main() { - color = GetRenderColor() * Ambient; - color += vec4(calcLight(), 1); + vec4 render = GetRenderColor(); + + color = render * Ambient; + + color += vec4(calcLight() * render.xyz, 1); } \ No newline at end of file diff --git a/SM_TEST/Program.cs b/SM_TEST/Program.cs index 8ea6954..6a6c9a2 100644 --- a/SM_TEST/Program.cs +++ b/SM_TEST/Program.cs @@ -44,31 +44,32 @@ namespace SM_TEST window.Run(); } - private static DrawObject2D kasten; + private static PointLight light; private static DrawParticles particles; private static void WindowOnUpdateFrame(object sender, FrameEventArgs e) { if (Keyboard.GetState()[Key.R]) particles.Trigger(); //particles.Paused = Keyboard.GetState()[Key.P]; - kasten.Transform.Position.Set( window.Mouse.InWorld()); + light.Position.Set( window.Mouse.InWorld()); } private static void WindowOnLoad(object sender, EventArgs e) { scene.ShowAxisHelper = true; - kasten = new DrawObject2D(); + DrawObject2D kasten = new DrawObject2D(); kasten.Texture = new Texture(new Bitmap("herosword.png")); kasten.Transform.ApplyTextureSize(kasten.Texture, 500); scene.Objects.Add(kasten); DrawText text = new DrawText(font, "Text"); text.Transform.Position.Set(0, 500); - scene.HUD.Add(text); + scene.Objects.Add(text); - /*PointLight light = new PointLight(); - scene.LightInformations.Lights.Add(light);*/ + light = new PointLight(); + light.Color = new Color4(0, 1,0,1); + scene.LightInformations.Lights.Add(light); scene.LightInformations.Ambient = Color4.White;