rendered paste body// Globals
float4x4 view_proj_matrix : WorldViewProjection;
float time : Time;
float4x4 inv_view_matrix : WorldInverse;
float4x4 view_matrix : World;
float4 view_position;
float4 Light_Attenuation;
float4 Light_Color;
float4 Light_Ambient;
//float4x4 TransWorld;
struct VS_OUTPUT
{
float4 Position : POSITION;
float2 TexCoord: TEXCOORD0;
float4 LightDir: TEXCOORD1;
float3 HalfVect: TEXCOORD2;
};
VS_OUTPUT vertexMain( float4 inPos: POSITION, float3 inNormal: NORMAL,
float3 inTangent:TANGENT, float3 inBinormal:BINORMAL,
float2 inTxr: TEXCOORD0)
{
// Set out output
VS_OUTPUT Out;
// Make a "wave" pattern.
float ltime=(time/1000);
inPos.y+=10*(sin((-0.01*inPos.x+0.07*inPos.z)+ltime*1.3)*0.5+0.5);
// Position the vertex based on our projection
Out.Position = mul(inPos, view_proj_matrix);
Out.TexCoord = inTxr;
// Calculate distance form light to vertex and its direction
float4 LightDir;
LightDir.xyz = mul(float3(80,00,-80),inv_view_matrix) - inPos;
float Dist = length(LightDir.xyz);
LightDir.xyz = LightDir.xyz / Dist;
// Calculate vertex/distance based attenuation
LightDir.w = clamp(0,1, 1 / ( Light_Attenuation.x +
Light_Attenuation.y * Dist +
Light_Attenuation.z * Dist * Dist ));
// Determine the eye vector
float3 EyeVector = normalize(view_position-inPos);
// transform to tangent sspace
float3x3 TangentSpace;
TangentSpace[0] = inTangent;
TangentSpace[1] = inBinormal;
TangentSpace[2] = inNormal;
Out.HalfVect = mul(TangentSpace,normalize(LightDir.xyz+EyeVector));
Out.LightDir = float4(mul(TangentSpace,LightDir.xyz),LightDir.w);
return Out;
}
//float4 Light1_Color;
sampler2D tex0;
sampler2D tex1;
float4 Light_Point(float3 Normal, float3 HalfVect, float4 LightDir,
float4 LightColor)
{
// Compute both specular and diffuse factors
float SpecularAttn = pow( clamp(0, 1,dot(Normal, HalfVect)),16);
float DiffuseAttn = clamp(0, 1,dot(Normal, LightDir));
// Compute final lighting
float4 finallight = LightColor * LightDir.w * (SpecularAttn+DiffuseAttn);
finallight.y = 1.0;
return finallight;
}
float4 pixelMain(float2 inTxr:TEXCOORD0,float4 LightDir:TEXCOORD1,
float3 HalfVect:TEXCOORD2) : COLOR
{
// Read bump and influence the normal
float3 normal = tex2D(tex1,inTxr) * 2 - 1;
// Output lighting color
float4 lightdat = tex2D(tex0,inTxr)*
(0.15+Light_Point(normal,HalfVect,LightDir,Light_Color));
return lightdat;
//return float4(normal, 1.0);
}