|
From: <axl...@us...> - 2009-08-05 00:45:59
|
Revision: 456
http://hgengine.svn.sourceforge.net/hgengine/?rev=456&view=rev
Author: axlecrusher
Date: 2009-08-05 00:45:52 +0000 (Wed, 05 Aug 2009)
Log Message:
-----------
light shaders
Modified Paths:
--------------
Mercury2/Themes/default/Graphic/shaderTips.txt
Added Paths:
-----------
Mercury2/Themes/default/Graphic/differedStep1.frag
Mercury2/Themes/default/Graphic/differedStep1.vert
Mercury2/Themes/default/Graphic/differedStep2.frag
Mercury2/Themes/default/Graphic/differedStep2.vert
Added: Mercury2/Themes/default/Graphic/differedStep1.frag
===================================================================
--- Mercury2/Themes/default/Graphic/differedStep1.frag (rev 0)
+++ Mercury2/Themes/default/Graphic/differedStep1.frag 2009-08-05 00:45:52 UTC (rev 456)
@@ -0,0 +1,12 @@
+varying vec3 normal;
+varying vec3 pos;
+
+void main()
+{
+ //store position
+ gl_FragData[0] = vec4(pos, 1.0);
+
+ //store normal, a unused
+ gl_FragData[1] = vec4( (normalize(normal)+1.0)*0.5, 1.0);
+}
+
Added: Mercury2/Themes/default/Graphic/differedStep1.vert
===================================================================
--- Mercury2/Themes/default/Graphic/differedStep1.vert (rev 0)
+++ Mercury2/Themes/default/Graphic/differedStep1.vert 2009-08-05 00:45:52 UTC (rev 456)
@@ -0,0 +1,17 @@
+uniform mat4 HG_ModelMatrix;
+
+varying vec3 normal;
+varying vec3 pos;
+
+void main()
+{
+// gl_TexCoord[0] = gl_MultiTexCoord0;
+ gl_Position = ftransform();
+
+ vec4 n = vec4(gl_Normal, 0);
+
+ //normalize in fragment
+ normal = (HG_ModelMatrix * n).xyz;
+
+ pos = (HG_ModelMatrix * gl_Vertex).xyz;
+}
Added: Mercury2/Themes/default/Graphic/differedStep2.frag
===================================================================
--- Mercury2/Themes/default/Graphic/differedStep2.frag (rev 0)
+++ Mercury2/Themes/default/Graphic/differedStep2.frag 2009-08-05 00:45:52 UTC (rev 456)
@@ -0,0 +1,56 @@
+uniform sampler2D HG_Texture0;
+uniform sampler2D HG_Texture1;
+uniform sampler2D HG_Texture2;
+uniform vec4 HG_EyePos;
+uniform ivec4 HG_ViewPort;
+uniform vec4 HG_LightPos;
+uniform vec4 HG_LightAtten;
+
+void main()
+{
+ vec2 coord = gl_FragCoord.xy / vec2(HG_ViewPort.zw);
+ vec3 pos = texture2D(HG_Texture0, coord).xyz;
+ vec3 norm = texture2D(HG_Texture1, coord).xyz;
+ float att;
+ vec3 color, hv, diffuse, ambient;
+ diffuse = vec3(1.0);
+ ambient = vec3(0.0);
+ norm = normalize(norm);
+
+ vec3 eyeVec = normalize(HG_EyePos.xyz - pos);
+ vec3 lightDir = HG_LightPos.xyz - pos;
+ float dist = length(lightDir);
+
+ if(dist > HG_LightAtten.w) discard;
+
+ lightDir = normalize(lightDir);
+
+ float NdotL = max(dot(norm, lightDir),0.0);
+
+ color = vec3(0.0);
+ hv = normalize(eyeVec - lightDir);
+ float NdotHV;
+
+ vec3 materialSpec = vec3(1.0,1.0,1.0);
+ vec3 lightSpec = vec3(1.0,1.0,1.0);
+ float shine = 0.0;
+
+ //x = constant, y = linear, z = quad
+ att = 1.0 / (HG_LightAtten.x +
+ HG_LightAtten.y * dist +
+ HG_LightAtten.z * dist * dist);
+
+ vec3 c = att * (diffuse * NdotL + ambient);
+ color += att * (diffuse * NdotL + ambient);
+
+ NdotHV = max(dot(norm,hv),0.0);
+
+ color += att * materialSpec * lightSpec * pow(NdotHV, shine);
+
+ color *= float(NdotL > 0.0);
+ gl_FragColor = vec4(color, 1.0);
+
+// gl_FragColor = vec4(1.0);
+// gl_FragColor = vec4(lightDir,1.0);
+}
+
Added: Mercury2/Themes/default/Graphic/differedStep2.vert
===================================================================
--- Mercury2/Themes/default/Graphic/differedStep2.vert (rev 0)
+++ Mercury2/Themes/default/Graphic/differedStep2.vert 2009-08-05 00:45:52 UTC (rev 456)
@@ -0,0 +1,9 @@
+uniform mat4 HG_WorldMatrix;
+//vec3 lightPos;
+
+void main()
+{
+// gl_TexCoord[0] = gl_MultiTexCoord0;
+ gl_Position = ftransform();
+// lightPos = (HG_WorldMatrix * vec4(0,0,0,1)).xyz;
+}
Modified: Mercury2/Themes/default/Graphic/shaderTips.txt
===================================================================
--- Mercury2/Themes/default/Graphic/shaderTips.txt 2009-08-05 00:44:56 UTC (rev 455)
+++ Mercury2/Themes/default/Graphic/shaderTips.txt 2009-08-05 00:45:52 UTC (rev 456)
@@ -8,3 +8,13 @@
//(gl_Position.z - zNear) * (1/depthRange);
linearDepth = (gl_Position.z - HG_DepthRange.x) * HG_DepthRange.w;
+//normal to RGB
+rgb = (normal.xyz + 1.0) * 0.5;
+
+//rgb to normal
+normal.xyz = (c.rgb*2.0) - 1.0;
+
+//recompute normal z
+//WARNING this can cause incorrect sign on z
+Normal.z = sqrt(1.0 - n.x*n.x - ny*ny);
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|