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

Auteur Sujet: [RESOLU] appliquer un fragment shader lors de l'affichage d'un sf::ConvexShape  (Lu 3335 fois)

0 Membres et 1 Invité sur ce sujet

thoced

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

j'aurai besoin d'appliquer un pixel shader sur un convexshape lors de son affichage dans une rendertexture.

le but étant d'effectuer une dégradé sur un shadow texture.

Jusqu'a présent, j'ai créé un shadow map à l'aide de convershapes dans un rendertexture.

ces ombres sont réalisés à l'aide des côtés de mes formes et projetés en fonction de la position d'une lumière.

J'affiche ma scene principale également dans une deuxieme rendertexture.

et lors de l'affichage final dans le renderwindow, j'applique par pixel shader mon shadow map avec un dégradé en fonction de la distance avec la lumière.

Cela marche bien mais voulant par la suite utiliser plusieurs sources de lumières, j'aurai besoin d'effectuer les calculs en fonction de la lumière qui a généré l'ombre.

Pour ce faire, j'aurai aimé pouvoir précalculer mon shadow map déja dégradé à l'avance lors de sa création.

Lorsque je tente d'appliquer un shader lors de l'affichage du convexshape, celui-ci ne me rend pas l'image de l'ombre, je n'ai aucune erreur affiché mais aucun résultat non plus.

voici le bout de code.

Citer
/
/
cs -> étant un convershape
state -> contenant mon shader

_shader->setParameter("texture",sf::Shader::CurrentTexture);
_shader->setParameter("poslight",sf::vector2f(10,10));
_stencil->draw(cs,state);


ma question est donc la suivante, est-il possible d'appliquer un pixel shader directement lors de le l'affichage
du convexshape dans un rendertexture ? est-il logique de procéder ainsi ?

merci d'avance
« Modifié: Août 11, 2012, 08:53:31 pm par thoced »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : appliquer un fragment shader lors de l'affichage d'un sf::ConvexShape
« Réponse #1 le: Août 11, 2012, 05:24:16 pm »
Ton shader doit être adapté. En effet, dans le cas d'un sprite tu dois bien utiliser la texture pour calculer le pixel final, mais dans le cas d'un sf::ConvexShape il n'y a pas de texture (enfin j'imagine que tu n'en as pas dans ton cas), il faut plutôt utiliser la composante diffuse.

Si ça n'aide pas, il faudra voir ton shader. Et il faudrait aussi préciser "aucun résultat" : ça signifie que rien ne s'affiche ? Ou bien ta forme sans effet particulier du shader ?
Laurent Gomila - SFML developer

thoced

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : appliquer un fragment shader lors de l'affichage d'un sf::ConvexShape
« Réponse #2 le: Août 11, 2012, 05:54:01 pm »
Citer
Et il faudrait aussi préciser "aucun résultat" : ça signifie que rien ne s'affiche ? Ou bien ta forme sans effet particulier du shader ?

rien ne s'affiche, l'ombre n'existe plus.

Citer
il faut plutôt utiliser la composante diffuse.

tu veux dire utiliser gl_FrontMaterial.diffuse ?

merci déjà pour les explications.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : appliquer un fragment shader lors de l'affichage d'un sf::ConvexShape
« Réponse #3 le: Août 11, 2012, 08:25:15 pm »
Plutôt gl_Color.
Laurent Gomila - SFML developer

thoced

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
[RESOLU] appliquer un fragment shader lors de l'affichage d'un sf::ConvexShape
« Réponse #4 le: Août 11, 2012, 08:53:05 pm »
merci, cela fonctionne maintenant