Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - aug125

Pages: [1]
1
Graphique / [RESOLU]Application de plusieurs shaders
« le: Avril 06, 2014, 01:12:27 pm »
Bonjour !
Je me prends la tête sur les shaders depuis hier, et j'aurais besoin de votre aide :)

Je suis en train de réaliser un petit jeu en écran splitté. en voici un aperçu :



Comme vous le voyez, un pixel shader colore le jeu (mais pas le HUD) en jaune. Je voudrais faire en sorte d'appliquer ce shader sur un seul joueur seulement, ou sur certains joueurs. De plus, j'aimerais appliquer d'autres shaders par la suite.

Et c'est là que je suis complètement bloqué, car malgré mes essais je n'y arrive pas. Je n'arrive à appliquer qu'un Shader à la fois.

Voici le code, simplifié, que j'ai actuellement (je suis passé par pas mal de modifications) :
Course::Course(sf::RenderWindow &appWindow)
{
        RenderTexture appCourse; // Ce RenderTexture contient toutes les sprites appartenant au terrain de jeu (vaisseaux, météorites..), mais pas le HUD (temps, position..)
        appCourse.create(app.getSize().x, app.getSize().y);

        // Initialisation du shader
        m_shader.setParameter("texture", sf::Shader::CurrentTexture);
        m_shader.setParameter("largeur", (float)appWindow.getSize().x);
        m_shader.setParameter("hauteur", (float)appWindow.getSize().y);
        m_shader.loadFromFile("shader.txt", Shader::Fragment);
        m_shader.setParameter("couleur", Color(255,255,0));

// ----------------------------------BOUCLE PRINCIPALE----------------------------------------------
        while(continuer)
        {
                effacerEcran(appWindow);
                effacerEcran(appCourse);
                for (int i=0; i<m_nbJoueurs;i++) // Pour chaque joueur, on dessine les sprites.
                {
                        dessinerTerrain(appCourse, i);
                }
                dessinerShaders(appCourse);
                appliquer(appCourse, app);
                for (int i=0; i<m_nbJoueurs;i++)
                {                      
                        dessinerHUD(appWindow, i);
                }
        }
        afficher(appWindow);
}

void Course::dessinerShaders(RenderTexture &app)
{
        // J'essayais une solution désespérée ici.
        // Normalement j'envoie un paramètre supplémentaire au shader pour qu'il ne fasse pas toujours la même chose à chaque boucle.
        for (int i=0; i<m_nbJoueurs; i++)
        {
                app.display();
                app.draw(sf::Sprite(app.getTexture()), &m_shader);
        }
}

void Course::appliquer(RenderTexture &app, RenderWindow &appWindow)
{
        app.display();
        appWindow.draw(sf::Sprite(app.getTexture()));
}

// Afficher.
void Course::afficher(RenderWindow &appWindow)
{
        appWindow.display();
}

 

Je suis conscient que ce que j'ai écrit dans la méthode dessinerShaders doit être stupide, même si je ne comprend pas tout à fait pourquoi  :-\

Le principe de mon code est d'écrire dans un RenderTexture (appCourse) les éléments de terrain, puis d'appliquer le shader, puis de mettre le tout dans un RenderWindow (appWindow),  et enfin d'écrire le reste directement dans l'appWindow.

J'ai essayé d'utiliser des textures intermédiaires, mais l'instruction
Texture t = app.getTexture();
 
que je mettais dans dessinerShaders fait grandement ramer le jeu.

Voilà, en espérant avoir été assez clair, je vous remercie d'avance pour votre aide !

EDIT : Je me suis débrouillé en faisant en sorte de TOUT faire avec un seul shader.

2
Ah ? Parfais alors. Merci beaucoup pour cette réponse très rapide !

3
Bonjour !

Je suis en train de développer un petit jeu de courses, et j'utilise setViewport pour pouvoir séparer l'écran en 2, une partie pour chaque joueur. Ca fonctionne parfaitement. :)

Cependant, je voudrais savoir s'il est possible d'afficher un élément que pour une vue : par exemple un élément invisible pour l'autre joueur, ou d'une différente couleur.

Merci d'avance !

4
Audio / Re : Problème spatialisation du son
« le: Mai 01, 2012, 06:48:10 pm »
Très bien. Merci !

5
Audio / Problème spatialisation du son
« le: Mai 01, 2012, 05:59:27 pm »
Bonjour !

Je suis en train de réaliser un jeu de pong en SFML, et je m'intéresse à la spatialisation du son. Seulement, mon jeu n'est toujours pas en stéréo malgré mes tentatives...

Voici mon code concernant le son, en ne gardant que le nécessaire :

partie.h

sf::Sound m_sonRebond;


partie.cpp

m_largeur = 1600; m_hauteur = 900;

        Listener::SetPosition(m_largeur/2, m_hauteur/2, 0.0f); // Position du joueur.
        Listener::SetTarget(0,0,-1.f);
        Listener::SetGlobalVolume(50.f);

        sf::SoundBuffer buffer;
        if (!buffer.LoadFromFile("rebond.ogg"))
        {
                cout << "rebond.ogg introuvable" << endl;
                return;
        }
        m_sonRebond.SetBuffer(buffer);
        m_sonRebond.SetAttenuation(50.f);

        while(1)
        {
             // ...
             m_sonRebond.SetPosition(m_balle[j].getPosX(),m_balle[j].getPosY(),0.0f);
             m_sonRebond.Play();
        }

J'ai donc mes balles qui se baladent de (0;0) à (1600;900), et je voudrais que selon leur position, j'entende le rebond à gauche ou à droite.

J'ai fait en sorte que l'écouteur regarde vers l'axe Z avec <code type="cpp">
Listener::SetTarget(0,0,-1.f);
</code> , et j'ai positionné l'écouteur au milieu de l'écran. Malgré cela, j'entend toujours en mono... En fait, seul le globalVolume marche.

J'ai aussi essayé d'utilise un .wav à la place du .ogg, mais toujours pas d'amélioration.

Pourriez vous m'aider ?   :-\

Par ailleurs, je me posais une question : à quelle distance de l'écouteur entend-on entièrement le d'une seule oreille ?

EDIT : Je suis tombé sur ça :
"Only sounds with one channel (mono sounds) can be spatialized".

Peut-être que ça a un rapport ?

EDIT2 : C'était bien ça ! il fallait un seul canal ^^

Je maintiens toutefois mon auter question, à savoir :
 
à quelle distance de l'écouteur entend-on entièrement le d'une seule oreille ? Peut-on la régler ?

Pages: [1]