oliviermdvy | Salut,
voici le code HLSL tiré d'un exemple pour faire du shadow mapping
la partie la plus intéressante est :
Code :
- PS_OUTPUT RenderShadowsPS( PS_INPUT In )
- {
- PS_OUTPUT Output;
-
- // Standard lighting equation
- float4 vTotalLightDiffuse = float4(0,0,0,1);
- float3 lightDir = normalize(g_LightPos-In.vPos); // direction of light
- vTotalLightDiffuse += g_LightDiffuse * max(0,dot(In.vNormal, lightDir));
- vTotalLightDiffuse.a = 1.0f;
- // Now, consult the ShadowMap to see if we're in shadow
- float4 lightingPosition
- = GetPositionFromLight(In.vPos);// Get our position on the shadow map
-
- // Get the shadow map depth value for this pixel
- float2 ShadowTexC =
- 0.5 * lightingPosition.xy / lightingPosition.w + float2( 0.5, 0.5 );
- ShadowTexC.y = 1.0f - ShadowTexC.y;
- float shadowdepth = tex2D(ShadowMapSampler, ShadowTexC).r;
-
- // Check our value against the depth value
- float ourdepth = 1 - (lightingPosition.z / lightingPosition.w);
-
- // Check the shadowdepth against the depth of this pixel
- // a fudge factor is added to account for floating-point error
- if (shadowdepth-0.03 > ourdepth)
- {
- // we're in shadow, cut the light
- vTotalLightDiffuse = float4(0,0,0,1);
- };
- Output.RGBColor = tex2D(MeshTextureSampler, In.TextureUV) *
- (vTotalLightDiffuse + g_LightAmbient);
-
- return Output;
-
- }
|
Bon si j'ai bien compris le 'shadowdepth' est la distance enregistrée dans la shadow map pour la position de notre point à afficher et 'ourdeph' est la distance du point à afficher vue par la source lumineuse, là ou je pige pas c'est ce test :
Code :
- // Check the shadowdepth against the depth of this pixel
- // a fudge factor is added to account for floating-point error
- if (shadowdepth-0.03 > ourdepth)
- {
- // we're in shadow, cut the light
- vTotalLightDiffuse = float4(0,0,0,1);
- };
|
si la distance enregistrée dans la shadow map est supérieure à celle calculée pour notre point à afficher alors le point est dans l'ombre... heuu je croyais que c'était le contraire ? Normalement un point dont la distance est plus grande que celle enregistrée dans la shadow map est donc non visible de la source lumineuse et donc dans l'ombre.... et là c'est l'inverse... je comprends plus.. Y'aurait pas une bonne ame pour m'expliquer ? Ou alors donnez moi une référence d'un bon bouquin qui explique tout ça car je vais craquer là
Merci.
Message édité par oliviermdvy le 23-01-2011 à 10:12:42
|