|
From: Tapio V. <aa...@us...> - 2010-11-02 22:41:08
|
Module: performous
Branch: opengl2
Commit: 57e7dc077436ba191def63ce05b7f28c5e1899cc
Author: Tapio Vierros <tap...@gm...>
Date: Wed Nov 3 00:15:16 2010 +0200
Attempt to do simple per-pixel directional lighting, but something is broken.
---
themes/default/shaders/3dobject.frag | 16 ++++++++++++----
themes/default/shaders/3dobject.vert | 7 ++++++-
2 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/themes/default/shaders/3dobject.frag b/themes/default/shaders/3dobject.frag
index 3d9b59b..cce3a8b 100644
--- a/themes/default/shaders/3dobject.frag
+++ b/themes/default/shaders/3dobject.frag
@@ -2,18 +2,26 @@ uniform int texMode;
uniform sampler2D tex;
uniform sampler2DRect texRect;
+varying vec3 normal;
+
void main()
{
+ const vec3 lightDir = normalize(vec3(-50.0, 5.0, -15.0));
+ const vec3 ambient = vec3(0.1, 0.1, 0.1);
vec4 texel;
- vec4 color;
+
if (texMode == 1) {
texel = texture2D(tex, gl_TexCoord[0].st).rgba;
} else if (texMode == 2) {
texel = texture2DRect(texRect, gl_TexCoord[0].st).rgba;
} else if (texMode == 0) {
- texel = gl_Color;
+ texel = vec4(1.0, 1.0, 1.0, 1.0);
} else {
- texel = vec4(1.0,0.0,0.0,1.0);
+ texel = vec4(1.0, 0.0, 0.0, 1.0);
}
- gl_FragColor = vec4(texel.rgb*gl_Color.rgb, texel.a*gl_Color.a);
+
+ float NdotL = max(dot(normalize(normal), lightDir), 0.0);
+ vec3 color = ambient + texel.rgb * gl_Color.rgb * NdotL;
+
+ gl_FragColor = vec4(color, texel.a * gl_Color.a);
}
diff --git a/themes/default/shaders/3dobject.vert b/themes/default/shaders/3dobject.vert
index 570a61a..2c3013a 100644
--- a/themes/default/shaders/3dobject.vert
+++ b/themes/default/shaders/3dobject.vert
@@ -1,7 +1,12 @@
+varying vec3 normal;
+
void main()
{
+ normal = normalize(gl_NormalMatrix * gl_Normal);
+
gl_FrontColor = gl_Color;
gl_BackColor = gl_Color;
gl_TexCoord[0] = gl_MultiTexCoord0;
- gl_Position = ftransform();
+
+ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
|