From: <axl...@us...> - 2009-08-05 02:01:49
|
Revision: 458 http://hgengine.svn.sourceforge.net/hgengine/?rev=458&view=rev Author: axlecrusher Date: 2009-08-05 02:01:40 +0000 (Wed, 05 Aug 2009) Log Message: ----------- much improved look to lighting Modified Paths: -------------- Mercury2/Themes/default/Graphic/differedStep2.frag Mercury2/src/Light.cpp Mercury2/src/Light.h Modified: Mercury2/Themes/default/Graphic/differedStep2.frag =================================================================== --- Mercury2/Themes/default/Graphic/differedStep2.frag 2009-08-05 00:46:35 UTC (rev 457) +++ Mercury2/Themes/default/Graphic/differedStep2.frag 2009-08-05 02:01:40 UTC (rev 458) @@ -5,52 +5,41 @@ uniform ivec4 HG_ViewPort; uniform vec4 HG_LightPos; uniform vec4 HG_LightAtten; +uniform vec4 HG_LightColor; 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 dist = length(lightDir); + lightDir /= dist; //normalize float NdotL = max(dot(norm, lightDir),0.0); - color = vec3(0.0); - hv = normalize(eyeVec - lightDir); - float NdotHV; + if((dist > HG_LightAtten.w) || (NdotL <= 0.0)) discard; 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 + + float 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); + vec3 color = att * (HG_LightColor.rgb * NdotL); - NdotHV = max(dot(norm,hv),0.0); + vec3 hv = normalize( lightDir+(HG_EyePos.xyz-pos) ); + float NdotHV = max(dot(norm,hv),0.0); - color += att * materialSpec * lightSpec * pow(NdotHV, shine); + //pow(max(dot(H, normal.xyz), 0.0) - color *= float(NdotL > 0.0); - gl_FragColor = vec4(color, 1.0); - -// gl_FragColor = vec4(1.0); -// gl_FragColor = vec4(lightDir,1.0); + color += att * materialSpec * lightSpec * pow(max(NdotHV, 0.0), 100.0); + gl_FragColor.rgb = clamp(color, 0.0, 1.0); } Modified: Mercury2/src/Light.cpp =================================================================== --- Mercury2/src/Light.cpp 2009-08-05 00:46:35 UTC (rev 457) +++ Mercury2/src/Light.cpp 2009-08-05 02:01:40 UTC (rev 458) @@ -13,6 +13,7 @@ :MercuryAsset() { m_atten[0] = m_atten[1] = m_atten[2] = 0.0f; + m_color[0] = m_color[1] = m_color[2] = 1.0f; m_radius = 1.0f; m_fullscreen = false; } @@ -116,6 +117,11 @@ sa.value.fFloatV4[3] = m_radius; Shader::SetAttribute("HG_LightAtten", sa); + sa.value.fFloatV4[0] = m_color[0]; + sa.value.fFloatV4[1] = m_color[1]; + sa.value.fFloatV4[2] = m_color[2]; + Shader::SetAttribute("HG_LightColor", sa); + if (m_fullscreen) { glCullFace(GL_BACK); Modified: Mercury2/src/Light.h =================================================================== --- Mercury2/src/Light.h 2009-08-05 00:46:35 UTC (rev 457) +++ Mercury2/src/Light.h 2009-08-05 02:01:40 UTC (rev 458) @@ -31,6 +31,7 @@ void ComputeRadius(); float m_atten[3]; + float m_color[3]; float m_radius; MercuryMatrix m_worldPosition; MercuryMatrix m_worldPosition2; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |