#include "hdr.cg" // application to vertex shader struct a2v { float4 Position : POSITION; float4 Normal : NORMAL; }; // vertex shader to fragment shader struct v2f { float4 HPosition : POSITION; float4 P : TEXCOORD0; // position float3 N : TEXCOORD1; // normal float3 I : TEXCOORD2; // incident vector }; v2f main(a2v In, uniform float4x4 modelViewProj, uniform float4x4 model, uniform float3 eyePos ) { v2f Out; // transform position float4 P = mul(model, In.Position); // transform normal float3 N = transform_dir(model, In.Normal.xyz); N = normalize(N); // calculate incident vector float3 I = P.xyz - eyePos; Out.P = P; Out.N = N; Out.I = I; Out.HPosition = mul(modelViewProj, In.Position); return Out; }