!!ARBvp1.0 ATTRIB iPos = vertex.position; ATTRIB iNormal = vertex.normal; PARAM mvinv[4] = { state.matrix.modelview.invtrans }; PARAM mvp[4] = { state.matrix.mvp }; PARAM lightDir = state.light[0].position; PARAM halfDir = state.light[0].half; PARAM specExp = state.material.shininess; PARAM ambientCol = state.lightprod[0].ambient; PARAM diffuseCol = state.lightprod[0].diffuse; PARAM specularCol = state.lightprod[0].specular; TEMP xfNormal, temp, dots; OUTPUT oPos = result.position; OUTPUT oColor = result.color; # Transform the vertex to clip coordinates. DP4 oPos.x, mvp[0], iPos; DP4 oPos.y, mvp[1], iPos; DP4 oPos.z, mvp[2], iPos; DP4 oPos.w, mvp[3], iPos; # Transform the normal to eye coordinates. DP3 xfNormal.x, mvinv[0], iNormal; DP3 xfNormal.y, mvinv[1], iNormal; DP3 xfNormal.z, mvinv[2], iNormal; # Compute diffuse and specular dot products and use LIT to compute # lighting coefficients. DP3 dots.x, xfNormal, lightDir; DP3 dots.y, xfNormal, halfDir; MOV dots.w, specExp.x; LIT dots, dots; # Accumulate color contributions. MAD temp, dots.y, diffuseCol, ambientCol; MAD oColor.xyz, dots.z, specularCol, temp; MOV oColor.w, diffuseCol.w; END