[HLSL] Problème de positionnement

Problème de positionnement [HLSL] - C#/.NET managed - Programmation

Marsh Posté le 15-06-2007 à 13:04:14    

Bonjour à tous,  
 
J'ai essayé de programmer un shader qui permet de simuler de la lumière sur une image 2D (en fait il crée un cercle et multiplie la teinte des pixels compris dans ce cercle). Seulement voilà j'ai un petit problème pour le placement de la "lumière". Quand il est à 0.5, 0.5 (avec un intervalle 0, 1), donc au centre, il n'y a pas de problème, par contre quand je modifie la position X il ne bouge pas, si je modifie la position Y il se déplace verticalement (donc il déplace a la fois X et Y). Voici le code :  
 

Code :
  1. uniform extern texture ScreenTexture; 
  2. //Position de la lumiere   
  3. float2 position = (0.5f, 0.5f);
  4. //Rayon du cercle de lumiere  
  5. float rayon = 0.15f;
  6. //Intensité de la lumiere  
  7. float intensite = 4.0f;
  8. sampler ScreenS = sampler_state
  9. {
  10.     Texture = <ScreenTexture>;   
  11. };
  12. float4 PixelShader(float2 texCoord: TEXCOORD0) : COLOR
  13. {
  14.     float4 color = tex2D(ScreenS, texCoord);
  15.    
  16.     //Calcule la distance entre le centre de la lumiere et le pixel courrant  
  17.     //Le problème se trouve apparemment dans ma formule  
  18.     float distance = sqrt((position.x - texCoord.x)*(position.x - texCoord.x) + (position.y - texCoord.y)*(position.y - texCoord.y));
  19.     if(distance < rayon)
  20.     {
  21. //Illumine le pixel courrant en fonction de sa distance du centre de lumière  
  22. color += intensite*(rayon-distance);
  23.     }
  24.     return color;
  25. }
  26. technique
  27. {
  28.     pass P0
  29.     {
  30.         PixelShader = compile ps_2_0 PixelShader();
  31.     }
  32. }


 
Comme je l'ai mis dans les commentaires, le problème doit venir au niveau du calcul de la distance, mais je ne vois pas l'erreur. Quelqu'un pourrait-il m'aider ?  
 
Merci

Reply

Marsh Posté le 15-06-2007 à 13:04:14   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed