|
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.
|