Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: sf::Shader appliquer une texture de shadow en post effect SFML 2.0  (Lu 3348 fois)

0 Membres et 1 Invité sur ce sujet

thoced

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Bonjour à tous,

je suis nouveau sur ce forum et débutant en SFML 2.0


Voici ma question.

J'essaye d'appliquer par Shader une texture de type shadow map. Je m'explique

Je crée une texture avec mes ombres portées, ensuite en post effet, je désire appliquer cette texture par
pixel shader.

Je bloque sur la méthode. Comment appliquer mon pixel shader sur l'ensemble du rendering, juste avant d'effecter la méthode display() de l'objet RenderWindow ?.

Je pensais effectuer ceci :

_shader->setParameter("tex",sf::Shader::CurrentTexture);
 
où tex contiendrait donc mon image final et ensuite effectuer ceci :

sf::RenderState rs;
rs.Shader = _shader;
sf::Sprite sp;
sp.setTexture(shadow->getShadow()->getTexture());
_app->Draw(sp,rs);

  où shadow->getShadow()->getTexture() me retourne un objet de type RenderTexture contenant ma shadow texture

Est ce bien la bonne solution ?




Merci d'avance pour vos réponses
« Modifié: Juillet 09, 2012, 10:54:57 pm par Laurent »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : sf::Shader appliquer une texture de shadow en post effect SFML 2.0
« Réponse #1 le: Juillet 09, 2012, 11:02:12 pm »
Et pourquoi est-ce que tu n'essayes pas tout simplement ? Ca ne va pas faire exploser ton PC si ça ne marche pas, hein ;)

A part ça, rien à voir mais : pourquoi avais-tu posté sur "Général > Discussions générales" ?
Laurent Gomila - SFML developer

thoced

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : sf::Shader appliquer une texture de shadow en post effect SFML 2.0
« Réponse #2 le: Juillet 10, 2012, 06:42:00 pm »
Bonjour,

concernant la rubrique, effectivement je me suis trompé.

Maintenant concernant le code, bien sur que j'ai essayé et non mon pc n'a pas explosé lol, c'est bien cela le problème. (enfin non je suis content qu'il n'ai pas explosé ;) )

je pensais pouvoir donc récupérer mon image du rendu avec la méthode:

_shader->setParameter("tex",sf::Shader::CurrentTexture);

dans mon pixel shader je défini la variable suivante

 uniform sampler2D tex;

lorsque je tente simplement d'afficher ma texture compris dans la variable tex
en effectuant ceci :

vec4 pixel= texture2D(tex, gl_FragCoord.xy);

gl_FragColor =   pixel;

le résultat est un écran noir.

Lorsque je tente de passer n'importe qu'elles autres textures à ma variable tex, j'ai le même probleme.

Ma question est donc la suivante, ai je bien compris le principe ? n'ai je pas oublié quelques choses ?

Merci d'avance pour vos réponses.

PS : Pour l'instant pour afficher ma texture de shadow j'utilise le :

sf::RenderStates rs;
rs.blendMode = sf::BlendMode::BlendMultiply;


ma texture des ombres portés s'affiche correctement mais je voudrai pouvoir utiliser les shaders.

merci d'avance

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : sf::Shader appliquer une texture de shadow en post effect SFML 2.0
« Réponse #3 le: Juillet 10, 2012, 08:15:15 pm »
Citer
concernant la rubrique, effectivement je me suis trompé.
En fait je voulais savoir pourquoi, car beaucoup de gens se trompent et je ne sais pas comment éviter ça.

sf::Shader::CurrentTexture représente la texture de l'objet que tu dessines avec le shader, pas le contenu de la fenêtre. Si tu veux repasser tout ce que tu as dessiné dans un shader, alors il faut dessiner dans un RenderTexture et utiliser le résultat dans un sprite, auquel tu pourras appliquer ton shader.
Laurent Gomila - SFML developer

thoced

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : sf::Shader appliquer une texture de shadow en post effect SFML 2.0
« Réponse #4 le: Juillet 10, 2012, 09:54:10 pm »

Citer
En fait je voulais savoir pourquoi, car beaucoup de gens se trompent et je ne sais pas comment éviter ça.

A vrai dire, je n'avais même pas fait l'effort de regarder où la placer, l'accueil du forum est très clair

Citer
sf::Shader::CurrentTexture représente la texture de l'objet que tu dessines avec le shader, pas le contenu de la fenêtre. Si tu veux repasser tout ce que tu as dessiné dans un shader, alors il faut dessiner dans un RenderTexture et utiliser le résultat dans un sprite, auquel tu pourras appliquer ton shader.

ok j'ai compris, juste qu'il me semble avoir déjà tenté ceci mais si je ne me trompe pas lors de l'affichage de la RenderTexture au RenderWindow en utilisant la méthode draw, ( en passant par un sprite) le transfert était très lent.

Je vais retenter à moins que quelqu'un sache pourquoi cela pourrait être très lent.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : sf::Shader appliquer une texture de shadow en post effect SFML 2.0
« Réponse #5 le: Juillet 10, 2012, 11:07:02 pm »
Citer
A vrai dire, je n'avais même pas fait l'effort de regarder où la placer, l'accueil du forum est très clair
Ah mince, j'aurais pu t'engueuler directement alors ;D

Citer
ok j'ai compris, juste qu'il me semble avoir déjà tenté ceci mais si je ne me trompe pas lors de l'affichage de la RenderTexture au RenderWindow en utilisant la méthode draw, ( en passant par un sprite) le transfert était très lent.
Il n'y a pas de transfert, dessiner sur une texture ou sur la fenêtre est équivalent. A moins que tu n'aies une carte graphique vraiment préhistorique.

Sinon montre moi ton code, je te dirai s'il y a une erreur.
Laurent Gomila - SFML developer