IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DirectX Discussion :

Pixels adjacents dans pixel shader


Sujet :

DirectX

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Points : 7
    Points
    7
    Par défaut Pixels adjacents dans pixel shader
    Bonjour,

    comme vous m'avez été d'une aide efficace précédemment, je reviens vers vous avec une nouvelle question :

    Dans un pixel shader :
    savez vous s'il est possible et s'il existe des exemples pour accéder aux pixels adjacents au pixel en cours de traitement ?

    C'est-à-dire lors de l'éxecution il y a-til un moyen d'écrire en sortie la somme des valeurs de tous les pixels situés sur une ligne par exemple, ou encore d'effectuer la somme de toutes les composantes R des pixels d'une texture RGBA et l'envoyer en sortie ?

    merci d'avance pour tout renseignement sur le sujet !

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Quand tu vas aller lire dans ta texture, il suffit de modifier les coordonnées de texture. Pour les détails ça dépend comment tu écris tes shaders (ASM ? HLSL ?).

    Mais attention, la lecture aléatoire n'est supportée qu'à partir d'un certain modèle de shaders (2.0 si je me rappelle bien).

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    ...d'accord...

    je m'en doutais mais j'ai du mal à me representer cette solution.

    je code sous HLSL.

    En fait cela revient-il à faire du displacement mapping en quelques sorte ?

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Voici où j'en suis pour l'instant dans le pixel shader :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    PS_OUTPUT RenderScenePS( VS_OUTPUT In ) 
    { 
        PS_OUTPUT Output;
     
    	float texture1;
    	float texture2;
     
    	//echantillonnage
    	texture1 = tex2D(gTexture1Sampler, In.TextureUV);
    	texture2 = tex2D(gTexture2Sampler, In.TextureUV);
     
    	Output.RGBColor =(texture1 + texture2)	;
     
        return Output;
    }
    j'ai deux textures différentes en entrée (passées en variables globales bien sur). Pour l'exemple je fais la somme des deux textures, mais j'aimerai par exemple savoir comment sommer toutes les composantes rouges de la texture 1, puis ajouter ce nombre à chaque pixel constitutif de la texture 2, ou au pire tout simplement le ressortir avec un Output...

    Pourriez vous me mettre sur la piste avec un exemple de code sur la façon dont je dois utiliser les coordonnées pour faire cela...?

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Il faut que tu connaisses la taille de ta texture en pixels (donc que tu la passes au shader via une constante), afin de pouvoir calculer le décalage nécessaire pour passer d'un pixel à un autre.

    Ensuite c'est simple, au lieu de lire le pixel In.TextureUV, tu iras lire le pixel In.TextureUV + Offset. Avec Offset un vecteur calculé en fonction de la position du pixel à aller lire.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Points : 7
    Points
    7
    Par défaut Merci !
    Effectivement dit comme ça tout devient clair..du moins j'ai l'impression.
    merci pour ces informations qui répondent tout à fait à ce queje recherchais.

    Décidemment vous êtes vraiments efficace sur ce forum !

    Merci et Bonne fin de journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. glsl pixel précédent dans le fragment shader
    Par coupecoupe dans le forum OpenGL
    Réponses: 8
    Dernier message: 07/12/2011, 09h43
  2. [Newsletter] Pixel caché
    Par Sekigawa dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 30/07/2009, 13h41
  3. Réponses: 11
    Dernier message: 28/02/2008, 10h44
  4. Pixel blanc dans la bordure de mon tableau en FOP
    Par Kathryn12 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 10/07/2007, 17h11
  5. Opérations sur les textures dans pixels shader
    Par ultimanu dans le forum DirectX
    Réponses: 10
    Dernier message: 27/04/2007, 09h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo