File: VertexLighting.cg

package info (click to toggle)
vtk 5.8.0-13
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 130,524 kB
  • sloc: cpp: 1,129,256; ansic: 708,203; tcl: 48,526; python: 20,875; xml: 6,779; yacc: 4,208; perl: 3,121; java: 2,788; lex: 931; sh: 660; asm: 471; makefile: 299
file content (56 lines) | stat: -rw-r--r-- 1,344 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56

struct vertin
{
  float4 Position: POSITION;
  float3 Normal: NORMAL;
};

struct vertout
{
  float4 Position : POSITION;
  float4 Color    : COLOR;
};

vertout main(vertin IN,
  uniform float4x4 ModelViewProj,
  uniform float Ka,
  uniform float3 AmbientColor,
  uniform float Kd,
  uniform float3 DiffuseColor,
  uniform float Ks,
  uniform float Ksp,
  uniform float3 SpecularColor,

  uniform float3 lightPosition,
  uniform float3 eyePosition,
  uniform float3 lightDiffuseColor,
  uniform float3 lightAmbientColor,
  uniform float3 lightSpecularColor
)
{
  float3 N = IN.Normal; //invert(IN.Normal);
  vertout OUT;
  OUT.Position = mul(ModelViewProj, IN.Position);

  // Computer Ambient intensity.
  float3 ambient = Ka * AmbientColor * lightAmbientColor;

  // Comput Diffuse intensity.
  float3 L = normalize(lightPosition - IN.Position);
  float diffuseLight = max(dot(N, L), 0);
  float3 diffuse = Kd * DiffuseColor * lightDiffuseColor * diffuseLight;

  // Compute Specular intensity.
  float3 V = normalize(eyePosition - IN.Position);
  float3 H = normalize(L + V);
  float specularLight = pow(max(dot(N, H), 0), Ksp);
  if (diffuseLight <= 0) specularLight = 0;
  float3 specular = Ks * SpecularColor * lightSpecularColor * specularLight;

  OUT.Color.xyz = ambient + diffuse + specular;
  OUT.Color.w = 1;

  return OUT;
}