I got some trouble in combine cg file (terrain + shadow). My terrain doen’st show shadow:
and this is my cg file
//Cg
//Cg profile arbvp1 arbfp1
void vshader( in float4 vtx_position : POSITION,
in float3 vtx_normal : NORMAL,
in float2 vtx_texcoord0 : TEXCOORD0,
in float2 vtx_texcoord3 : TEXCOORD3,
in uniform float4x4 mat_modelproj,
in uniform float4x4 trans_model_to_clip_of_light,
in uniform float4x4 trans_model_to_world,
in uniform float3 k_lightvec,
in uniform float4 k_lightcolor,
in uniform float4 k_tscale,
in uniform float4 mspos_light,
in uniform float4 k_push,
in uniform float4 k_scale,
out float4 l_diffuse,
out float4 l_lightcolor,
out float4 l_mpos,
out float2 l_texcoord0 : TEXCOORD0,
out float2 l_texcoord3 : TEXCOORD3,
out float4 l_shadowcoord : TEXCOORD1,
out float4 l_lightclip : TEXCOORD2,
out float4 l_position : POSITION)
{
float4 position = vtx_position * k_scale;
// worldspace position, for clipping in the fragment shader
l_mpos = mul(trans_model_to_world, vtx_position);
l_position=mul(mat_modelproj,vtx_position);
l_texcoord0=vtx_texcoord0*k_tscale;
l_texcoord3=vtx_texcoord3;
vtx_normal.z /= k_scale.z;
// lighting diffuse
float3 N = normalize( vtx_normal );
float3 L = normalize( k_lightvec );
l_diffuse = max( dot( -N, L ), 0.0f )*k_lightcolor;
// Calculate light-space clip position.
float4 pushed = position + float4(vtx_normal * k_push, 0);
l_lightclip = mul(trans_model_to_clip_of_light, pushed);
// Calculate shadow-map texture coordinates.
l_shadowcoord = l_lightclip * float4(0.5,0.5,0.5,1.0) + l_lightclip.w * float4(0.5,0.5,0.5,0.0);
}
void fshader( in float4 l_position : POSITION,
in float2 l_texcoord0 : TEXCOORD0,
in float2 l_texcoord3 : TEXCOORD3,
in float4 l_shadowcoord : TEXCOORD1,
in float4 l_lightclip : TEXCOORD2,
in float4 l_diffuse,
in float4 l_lightcolor,
in float4 l_mpos,
in uniform sampler2D tex_0 : TEXUNIT0,
in uniform sampler2D tex_1 : TEXUNIT1,
in uniform sampler2D tex_2 : TEXUNIT2,
in uniform sampler2D tex_3 : TEXUNIT3,
in uniform sampler2D tex_4 : TEXUNIT4,
in uniform sampler2D tex_5 : TEXUNIT5,
in uniform sampler2D k_Ldepthmap : TEXUNIT6,
in uniform float4 k_ambientlight,
out float4 o_color : COLOR )
{
// alpha splatting and lighting
float4 tex1=tex2D(tex_0,l_texcoord0);
float4 tex2=tex2D(tex_1,l_texcoord0);
float4 tex3=tex2D(tex_2,l_texcoord0);
float alpha1=tex2D(tex_3,l_texcoord3).z;
float alpha2=tex2D(tex_4,l_texcoord3).z;
float alpha3=tex2D(tex_5,l_texcoord3).z;
o_color =tex1*alpha1;
o_color+=tex2*alpha2;
o_color+=tex3*alpha3;
// shadow
//float3 circleoffs = float3(l_lightclip.xy / l_lightclip.w, 0);
//float falloff = saturate(1.0 - dot(circleoffs, circleoffs));
float shade = tex2Dproj(k_Ldepthmap,l_shadowcoord);
o_color=o_color*(l_diffuse * shade + k_ambientlight);
o_color.a=1.0;
}