float distanceScale; float4 lightPosition; float4 camera_pos; float4x4 worldviewproj; float4x4 proj_matrix; /* struct VS_OUTPUT { float4 Pos: POSITION; float3 normal: TEXCOORD0; float3 lightVec : TEXCOORD1; float3 viewVec: TEXCOORD2; float4 shadowCrd: TEXCOORD3; float2 texCoord: TEXCOORD4; float2 texCoordNormalized: TEXCOORD5; }; VS_OUTPUT main_vp( float4 position : POSITION, float4 normal : NORMAL, float2 texCoord : TEXCOORD0, float2 texCoordNormalized : TEXCOORD1) { VS_OUTPUT Out; Out.Pos = mul(worldviewproj, position); // World-space lighting Out.normal = normal; Out.lightVec = distanceScale * (lightPosition - position.xyz); Out.viewVec = camera_pos - position.xyz; Out.texCoord = texCoord; Out.texCoordNormalized = texCoordNormalized; // Project it. For this sample using the normal projection // matrix suffices, however, real applications will typically // use a separate projection matrix for each light depending // on its properties such as FOV and range. float4 sPos = mul(proj_matrix, Pos); // Use projective texturing to map the position of each fragment // to its corresponding texel in the shadow map. sPos.z += 10; Out.shadowCrd.x = 0.5 * (sPos.z + sPos.x); Out.shadowCrd.y = 0.5 * (sPos.z - sPos.y); Out.shadowCrd.z = 0; Out.shadowCrd.w = sPos.z; return Out; } */ struct VS_OUTPUT { float4 Pos: POSITION; float2 texCoord: TEXCOORD0; float2 texCoordNormalized : TEXCOORD1; }; VS_OUTPUT main_vp( float4 position : POSITION, float2 texCoord : TEXCOORD0, float2 texCoordNormalized : TEXCOORD1) { VS_OUTPUT Out; Out.Pos = mul(worldviewproj, position); Out.texCoord = texCoord; Out.texCoordNormalized = texCoordNormalized; return Out; }