struct appdata { float3 position : POSITION; float3 normale : NORMAL; float2 texcoord0 : TEXCOORD0; }; struct Vert { float4 position : POSITION; float3 texcoord0 : TEXCOORD0; float2 texcoord1 : TEXCOORD1; float2 texcoord2 : TEXCOORD2; float2 texcoord3 : TEXCOORD3; }; void computeProjectiveCoords( out float2 c, float4 pS, float4x4 camMat ) { float4 pE; pE = mul( camMat, pS ); pE /= pE.w; c = pE.xy; } Vert main( appdata I, const uniform float4x4 mat : register(c0), const uniform float4x4 mat0 : register(c4), const uniform float4x4 mat1 : register(c8), const uniform float4x4 mat2 : register(c12) ) { Vert O; float4 p_cam_space, pS; pS = float4( I.position.x, I.position.y, I.position.z, 1.0 ); p_cam_space = mul( mat, pS ); computeProjectiveCoords( O.texcoord1, pS, mat0 ); computeProjectiveCoords( O.texcoord2, pS, mat1 ); computeProjectiveCoords( O.texcoord3, pS, mat2 ); O.texcoord0 = I.position; O.position = p_cam_space; return O; }