struct s_app2vert { float4 position : POSITION; float4 normal : NORMAL; float4 diffuse : COLOR0; }; struct s_vert2frag { float4 hPos : POSITION; float4 color : COLOR0; float4 texcoord : TEXCOORD0; }; s_vert2frag main(s_app2vert IN, uniform float3 Light, uniform float4x4 ModelViewIT, uniform float4x4 ModelView, uniform float4x4 ModelViewProj, uniform float4x4 Projection) { float3 pos = mul(ModelView, IN.Position).xyz; float3 light = normalize(pos - light); float3 origin = {0.0, 0.0, 0.0}; float3 light2Origin = normalize(origin - Light); float3 tmpUpVec = {0.0, 1.0, 0.0}; float3 rightVec = normalize(cross(light2Origin, tmpUpVec)); float3 upVec = normalize(cross(light2Origin, rightVec)); s_vert2frag OUT; OUT.color = IN.Diffuse; OUT.texcoord[3] = 1.0; OUT.texcoord[0] = 0.5*dot(rightVec, light)+0.5; OUT.texcoord[1] = 0.5*dot(upVec, light)+0.5; OUT.hpos = mul(ModelViewProj, IN.Position); return OUT; }