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

Auteur Sujet: [SFML 2.0] Information sur l'utilisation des shaders  (Lu 4011 fois)

0 Membres et 1 Invité sur ce sujet

malfrax

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
[SFML 2.0] Information sur l'utilisation des shaders
« le: Mars 24, 2013, 11:41:17 am »
Bonjour,
Je me suis un peu renseigner sur l'utilisation des shaders. De ce que j'ai compris c'est que les shaders vont etre une sorte de programme qui va modifier l'image par pixel en utilisant la carte graphique. Mais je ne comprend pas quelque chose, comment je vais pouvoir récupérer les informations de mon jeu via mon main de mon shader. Pour faire des ombres par exemple, il faut que je trouve les informations necessaires comme les lumieres et les objets. Et je ne sais pas comment faire ^^.
Es que se serait possible d'avoir des explications sur comment sa se passe ^^ Je serais pas contre un code d'exemple de shader utilisé avec la SFML ^^
Merci d'avance :)

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : [SFML 2.0] Information sur l'utilisation des shaders
« Réponse #1 le: Mars 24, 2013, 11:47:44 am »
Y'a des exemples sur github : https://github.com/SFML/SFML/tree/master/examples/shader
Les shaders sont programmés en GLSL, c'est toute une utilisation (pas très compliquée non plus) à apprendre si tu veux t'en servir. ^^

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2.0] Information sur l'utilisation des shaders
« Réponse #2 le: Mars 24, 2013, 12:05:24 pm »
Citer
Mais je ne comprend pas quelque chose, comment je vais pouvoir récupérer les informations de mon jeu via mon main de mon shader
Pour passer des variables au shader (telles que la position/intensité/couleur de ta lumière), il faut utiliser la fonction Shader::setParameter. Dans le shader, il faut déclarer la variable avec le mot-clé uniform.

uniform vec4 color;
uniform vec2 position;
uniform float intensity;

void main()
{
    ...
}

sf::Shader shader;
shader.loadFromFile(...);
...
shader.setParameter("color", sf::Color(...));
shader.setParameter("position", sf::Vector2f(...));
shader.setParameter("intensity", ...);

Et oui, n'hésite pas à t'inspirer des exemples ;)
Laurent Gomila - SFML developer

malfrax

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : [SFML 2.0] Information sur l'utilisation des shaders
« Réponse #3 le: Mars 25, 2013, 12:45:46 pm »
J'ai reussi a faire un truc qui marche c'est cool :) mais je voudrais savoir si je peut inclure des structures ou des class dans mon shader et le Set via mon main ? Si oui comment ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2.0] Information sur l'utilisation des shaders
« Réponse #4 le: Mars 25, 2013, 12:54:43 pm »
Citer
mais je voudrais savoir si je peut inclure des structures ou des class dans mon shader
Non, ce n'est pas possible. Il faut limiter le nombre de variables (tu ne peux de toute façon en déclarer qu'un certain nombre), et toutes les gérer une par une.
Laurent Gomila - SFML developer

malfrax

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : [SFML 2.0] Information sur l'utilisation des shaders
« Réponse #5 le: Mars 25, 2013, 02:45:22 pm »
Du coup je dois faire plusieurs appelle au shader avec des parametres differents ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2.0] Information sur l'utilisation des shaders
« Réponse #6 le: Mars 25, 2013, 02:57:45 pm »
Non non, ça ne marche pas comme ça. Mais quel est ton problème au juste ? Ca ira plus vite si je te dis comment faire, plutôt que de répondre à tes questions successives sans trop savoir où tu vas ;)
Laurent Gomila - SFML developer

malfrax

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : [SFML 2.0] Information sur l'utilisation des shaders
« Réponse #7 le: Mars 25, 2013, 03:18:29 pm »
En faite j'ai un vector d'objet qui sont susceptible de creer de l'ombre. et j'ai un vector de light qui produise de la lumiere. J'aimerais creer des ombres par rapport au lumiere et au objets. Les lumieres sont en 2D en vue de cote. si on a un carrer avec une lumiere sur le cote on va voir apparaitre un triangle noir sur l'opposer de la lumiere, coller au carrer.

http://www.google.fr/imgres?start=373&um=1&hl=fr&safe=off&tbm=isch&tbnid=aWEY_Y5_gg187M:&imgrefurl=http://stackoverflow.com/questions/5964096/dynamic-2d-shadows-blending-issue&docid=RMbGYnnizj80eM&imgurl=http://i.stack.imgur.com/QDMaB.jpg&w=1280&h=800&ei=Vl1QUdHLHIHKhAeK7oHYBw&zoom=1&iact=hc&vpx=617&vpy=316&dur=1630&hovh=177&hovw=284&tx=178&ty=140&page=8&tbnh=140&tbnw=218&ndsp=50&ved=1t:429,r:77,s:300,i:235&biw=1920&bih=937

Un exemple
« Modifié: Mars 25, 2013, 03:22:15 pm par malfrax »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2.0] Information sur l'utilisation des shaders
« Réponse #8 le: Mars 25, 2013, 03:39:11 pm »
Et tu pensais pouvoir envoyer tout ce beau monde au shader, et qu'il arrive magiquement à sortir les ombres ? ;)

Tu devrais commencer par lire des articles sur l'implémentation d'ombres et d'effets de lumières 2D en shaders. Trouve des exemples aussi. Ensuite essaye de visualiser ton algo de manière grossière. Arrivé là tu auras une bonne idée de comment écrire ton shader, et de ce que tu devras lui envoyer. Note bien que ce sera sûrement plus compliqué que simplement écrire un shader. Il faudra certainement faire des rendus intermédiaires, etc. Bref, documente toi sur le sujet avant de partir à l'arrache ;)
Laurent Gomila - SFML developer

malfrax

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : [SFML 2.0] Information sur l'utilisation des shaders
« Réponse #9 le: Mars 25, 2013, 03:57:39 pm »
Je suis ton conseil et je te recontacterais si j'ai encore des questions ^^