ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libgender/fsh.cg
(Generate patch)

Comparing libgender/fsh.cg (file contents):
Revision 1.7 by root, Tue Oct 5 08:28:39 2004 UTC vs.
Revision 1.8 by root, Tue Oct 5 10:28:49 2004 UTC

1// final pixel output:
2// data from pixel shader to frame buffer
3struct vertexOut { 1struct vertexOut {
4 float4 HPosition : POSITION; 2 float4 HPosition : POSITION;
5 float4 TexCoord : TEXCOORD0; 3 float4 TexCoord : TEXCOORD0;
6 float3 LightVec : TEXCOORD1; 4 float3 LightVec : TEXCOORD1;
5 float3 EyeVec : TEXCOORD2;
7 float3 WorldNormal : TEXCOORD2; 6 float3 WorldNormal : TEXCOORD3;
8 float3 WorldPos : TEXCOORD3;
9 float3 WorldView : TEXCOORD4;
10}; 7};
11 8
12struct pixelOut { 9struct pixelOut {
13 float4 col : COLOR; 10 float4 col : COLOR;
14}; 11};
15 12
16// pixel shader
17pixelOut main(vertexOut IN) 13pixelOut main(vertexOut IN)
18{ 14{
15 pixelOut OUT; // output of the pixel shader
16
19 float SpecExpon = 120; 17 float SpecExpon = 120;
20 float4 LightColor = { 1, 1, 1, 1 }; 18 float4 LightColor = { 1, 1, 1, 1 };
21 19
22 pixelOut OUT; // output of the pixel shader
23 float3 Ln = normalize(IN.LightVec); 20 float3 Ln = IN.LightVec;
24 float3 Nn = normalize(IN.WorldNormal); 21 float3 Nn = IN.WorldNormal;
25 float3 Vn = (IN.WorldView); 22 float3 Vn = IN.EyeVec;
23
26 float3 Hn = 0.5 * (Vn + Ln); 24 float3 Hn = 0.5 * (Ln + Vn);
27 // scalar product between light and normal vectors:
28 float ldn = abs(dot(Ln,Nn)); 25 float ldn = dot (Ln, Nn);
29 // scalar product between halfway and normal vectors:
30 float hdn = abs(dot(Hn,Nn)); 26 float hdn = dot (Hn, Nn);
27
31 // specialized "lit" function computes weights for 28 // specialized "lit" function computes weights for
32 // diffuse and specular parts: 29 // diffuse and specular parts:
33 float4 litV = lit(ldn,hdn,SpecExpon); 30 float4 litV = lit (ldn, hdn, SpecExpon);
34 float4 diffContrib = glstate.material.diffuse * ( litV.y * LightColor + glstate.lightmodel.ambient); 31 float4 diffContrib = glstate.material.diffuse * (litV.y * LightColor + glstate.lightmodel.ambient);
35 float4 specContrib = litV.y*litV.z * LightColor; 32 float4 specContrib = litV.y * litV.z * LightColor;
36 // sum of diffuse and specular contributions:
37 float4 result = diffContrib + specContrib; 33 float4 result = diffContrib + specContrib;
34
38 OUT.col = result; 35 OUT.col = result;
39 return OUT; // output of pixel shader 36 return OUT; // output of pixel shader
40} 37}
41 38

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines