| @@ -42,7 +42,8 @@ varying vec4 pass_Color; | |||||
| // FIXME: the light direction should be passed in the code | // FIXME: the light direction should be passed in the code | ||||
| vec3 in_LightDir = vec3(0.3, 0.3, 0.7); | vec3 in_LightDir = vec3(0.3, 0.3, 0.7); | ||||
| void main(void) { | |||||
| void main(void) | |||||
| { | |||||
| /* Material properties */ | /* Material properties */ | ||||
| vec3 specular_reflect = vec3(0.8, 0.75, 0.4); | vec3 specular_reflect = vec3(0.8, 0.75, 0.4); | ||||
| float specular_power = 60.0; | float specular_power = 60.0; | ||||
| @@ -79,47 +80,60 @@ void main(float3 in_Vertex : POSITION, | |||||
| uniform float4x4 in_ModelView, | uniform float4x4 in_ModelView, | ||||
| uniform float4x4 in_Proj, | uniform float4x4 in_Proj, | ||||
| uniform float3x3 in_NormalMat, | uniform float3x3 in_NormalMat, | ||||
| out float4 pass_Eye : TEXCOORD0, | |||||
| out float3 pass_TNormal : TEXCOORD1, | |||||
| out float4 pass_Color : COLOR, | |||||
| out float4 out_Position : POSITION) | |||||
| { | |||||
| float4 eye = mul(in_ModelView, float4(in_Vertex, 1.0)); | |||||
| float3 tnorm = normalize(mul(in_NormalMat, in_Normal)); | |||||
| pass_Eye = eye; | |||||
| pass_TNormal = tnorm; | |||||
| #ifdef _XBOX | |||||
| pass_Color = in_Color.abgr; | |||||
| #else | |||||
| pass_Color = in_Color; | |||||
| #endif | |||||
| out_Position = mul(in_Proj, eye); | |||||
| } | |||||
| -- HLSL.Frag -- | |||||
| void main(float4 pass_Eye : TEXCOORD0, | |||||
| float3 pass_TNormal : TEXCOORD1, | |||||
| float4 pass_Color : COLOR, | |||||
| uniform float in_Damage, | uniform float in_Damage, | ||||
| out float4 out_Position : POSITION, | |||||
| out float4 pass_Color : COLOR) | |||||
| out float4 out_FragColor : COLOR) | |||||
| { | { | ||||
| float3 in_LightDir = normalize(float3(0.3, 0.3, 0.7)); | |||||
| float3 in_LightDir = float3(0.3, 0.3, 0.7); | |||||
| /* Material properties */ | |||||
| float3 specular_reflect = float3(0.8, 0.75, 0.4); | float3 specular_reflect = float3(0.8, 0.75, 0.4); | ||||
| float specular_power = 60.0; | float specular_power = 60.0; | ||||
| /* World properties */ | |||||
| float ambient_mul = 0.5; | float ambient_mul = 0.5; | ||||
| float3 ambient_color = float3(0.25, 0.2, 0.35); | float3 ambient_color = float3(0.25, 0.2, 0.35); | ||||
| float3 diffuse_color = float3(1.0, 1.0, 0.6); | float3 diffuse_color = float3(1.0, 1.0, 0.6); | ||||
| float3 specular_color = float3(1.0, 1.0, 0.6); | float3 specular_color = float3(1.0, 1.0, 0.6); | ||||
| float3 tnorm = normalize(mul(in_NormalMat, in_Normal)); | |||||
| float4 eye = mul(in_ModelView, float4(in_Vertex, 1.0)); | |||||
| float3 s = in_LightDir; | |||||
| float3 v = normalize(-eye.xyz); | |||||
| float3 r = reflect(-s, tnorm); | |||||
| float3 s = normalize(in_LightDir); /* normalize(pass_Eye - lightpos); */ | |||||
| float3 v = normalize(-pass_Eye.xyz); | |||||
| float3 r = reflect(-s, pass_TNormal); | |||||
| float3 ambient = ambient_color; | float3 ambient = ambient_color; | ||||
| float sdotn = max(dot(s, tnorm), 0.0); | |||||
| float sdotn = max(dot(s, pass_TNormal), 0.0); | |||||
| float3 diffuse = diffuse_color * sdotn; | float3 diffuse = diffuse_color * sdotn; | ||||
| float3 specular = float3(0.0, 0.0, 0.0); | float3 specular = float3(0.0, 0.0, 0.0); | ||||
| if (sdotn > 0.0) | if (sdotn > 0.0) | ||||
| specular = specular_color * specular_reflect | specular = specular_color * specular_reflect | ||||
| * pow(max(dot(r, v), 0.0), specular_power); | * pow(max(dot(r, v), 0.0), specular_power); | ||||
| float3 light = ambient + diffuse + specular; | float3 light = ambient + diffuse + specular; | ||||
| #ifdef _XBOX | |||||
| float4 real_color = in_Color.abgr; | |||||
| #else | |||||
| float4 real_color = in_Color; | |||||
| #endif | |||||
| real_color = in_Damage * float4(1.2, 1.2, 1.2, 1.0) | |||||
| + (1.0 - in_Damage) * real_color; | |||||
| pass_Color = real_color * float4(light, 1.0); | |||||
| out_Position = mul(in_Proj, eye); | |||||
| } | |||||
| void main(float4 pass_Color : COLOR, | |||||
| out float4 out_FragColor : COLOR) | |||||
| { | |||||
| out_FragColor = pass_Color; | |||||
| float4 real_color = in_Damage * float4(1.2, 1.2, 1.2, 1.0) | |||||
| + (1.0 - in_Damage) * pass_Color; | |||||
| out_FragColor = real_color * float4(light, 1.0); | |||||
| } | } | ||||