!!ARBfp1.0 # # Demonstrates basic vertex/fragment shader communication. # # Orion Sky Lawlor, olawlor@acm.org, 2005/2/7 (Public Domain) # # Vertex/fragment communication protocol ATTRIB world =fragment.texcoord[4]; # World-coordinates position ATTRIB worldNi=fragment.texcoord[5]; # World-coordinates normal (interpolated) ATTRIB albedo =fragment.texcoord[6]; # Material "diffuse color" ATTRIB viewdir=fragment.texcoord[7]; # Viewing direction (points toward eye) TEMP L, worldN; DP4 L.x,worldNi,worldNi; # Normalize worldNi to worldN RSQ L,L.x; MUL worldN,worldNi,L; # Regular diffuse lighting: normal dot light TEMP diffuse; DP3_SAT diffuse, worldN, state.light[0].position; ADD diffuse,diffuse,0.2; # state.light[0].ambient; MUL diffuse,diffuse,albedo; # Specular lighting: normal dot halfway vector TEMP half,specular; ADD half,viewdir,state.light[0].position; DP4 L.x,half,half; # Normalize half RSQ L,L.x; MUL half,half,L; DP3 specular,worldN,half; POW specular,specular.r,state.material.shininess.r; ADD result.color, diffuse, specular; END