--- libgender/fsh.cg 2004/10/05 07:35:26 1.3 +++ libgender/fsh.cg 2004/10/06 00:33:42 1.13 @@ -1,50 +1,38 @@ -// final pixel output: -// data from pixel shader to frame buffer struct vertexOut { - float4 HPosition : POSITION; - float4 TexCoord : TEXCOORD0; - float3 LightVec : TEXCOORD1; - float3 WorldNormal : TEXCOORD2; - float3 WorldPos : TEXCOORD3; - float3 WorldView : TEXCOORD4; + float4 HPosition : POSITION; + float4 TexCoord : TEXCOORD0; + float3 LightVec : TEXCOORD1; + float3 EyeVec : TEXCOORD2; + float3 WorldNormal : TEXCOORD3; + float3 WorldView : TEXCOORD4; }; struct pixelOut { float4 col : COLOR; }; -// pixel shader -pixelOut main(vertexOut IN // input from vertex shade - //uniform float SpecExpon, // constant parameters fro - //uniform float4 AmbiColor, // application - //uniform float4 SurfColor, - //uniform float4 LightColor - ) +pixelOut main(vertexOut IN) { - float SpecExpon = 100; - float4 AmbiColor = { 0.5, 0, 0, 1 }; - float4 SurfColor = { 0, 0.5, 0, 1 }; + pixelOut OUT; + + half SpecExpon = 200; float4 LightColor = { 1, 1, 1, 1 }; - pixelOut OUT; // output of the pixel shader - float3 Ln = normalize(IN.LightVec); - float3 Nn = normalize(IN.WorldNormal); - float3 Vn = normalize(IN.WorldView); - float3 Hn = normalize(Vn + Ln); - // scalar product between light and normal vectors: - float ldn = dot(Ln,Nn); - // scalar product between halfway and normal vectors: - float hdn = dot(Hn,Nn); - // specialized "lit" function computes weights for - // diffuse and specular parts: - float4 litV = lit(ldn,hdn,SpecExpon); - OUT.col = litV.x * AmbiColor + litV.y * SurfColor + litV.z * LightColor; + half3 Ln = normalize (IN.LightVec); + half3 Nn = normalize (IN.WorldNormal); + half3 Vn = normalize (IN.WorldView); + + half3 Hn = normalize (Ln + Vn); + half ldn = dot (Ln, Nn); + half hdn = dot (Hn, Nn); + + half4 litV = lit (ldn, hdn, SpecExpon); + //half4 diffContrib = glstate.material.diffuse * (litV.y * LightColor + glstate.lightmodel.ambient); + //half4 specContrib = litV.y * litV.z * LightColor; + //half4 result = diffContrib + specContrib; + half4 result = glstate.material.diffuse * litV.y + LightColor * litV.z; + + OUT.col = result; return OUT; - float4 diffContrib = SurfColor * ( litV.y * LightColor + AmbiColor); - float4 specContrib = litV.y*litV.z * LightColor; - // sum of diffuse and specular contributions: - float4 result = diffContrib + specContrib; - OUT.col = result + AmbiColor; - return OUT; // output of pixel shader }