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 - Excellium

16
Discussions générales / Forum français
« le: Avril 06, 2014, 02:24:29 pm »
Salut à tous,

Bon, il fallait bien que quelqu'un évoque ce sujet à un moment ou un autre, alors je me lance.
Ça fait pas mal de temps déjà que le forum français est moribond, s'agissant du moins de la partie générale.
Ce sujet à été par le passé débattu, avant le changement de forum, mais les conclusions d'alors ne sont plus applicables aujourd'hui suite à la baisse de fréquentation.
On voit bien aujourd'hui que le forum anglophone a bien rattrapé le forum français, de part le nombre d'inscrits, le nombre de postages en berne et les fréquentations.
Les francophones postent quasiment toujours pour leurs projets dans la partie anglophone et ensuite dans la partie francophone, mais on voit bien que les débats ce font toujours en anglais.
Je sais que certains d'entre nous sont des quiches en anglais, mais je pense que dans le domaine de la programmation, mieux vaut s'y mettre ou sinon c'est se priver d'une très riche documentation potable sur le sujet. Historiquement la partie francophone existe car le développeur de la SFML est français. Certes, mais la SFML c'est fortement internationalisé depuis, et des portugais, russes, allemands et j'en passe ne comprendrai pas vraiment pourquoi privilégier le français à toutes leurs langues pour des forums officiels. Enfin, il est agaçant d'avoir à consulter deux forums tous les jours, de peur de manquer quelque chose d’intéressant. La communauté y gagnerait vraiment de se ressouder sur ce point.

J'espère que mon message fera cogiter.
A bon entendeur.

17
Graphique / Re : Touche clavier
« le: Février 19, 2014, 06:20:07 pm »
Laurent a raison, pas la peine de sortir l'artillerie lourde...

18
Graphique / Re : Touche clavier
« le: Février 19, 2014, 03:21:00 pm »
La méthode sf::FloatRect::intersects est ton amie donc  :D

19
Graphique / Re : Touche clavier
« le: Février 19, 2014, 10:46:33 am »
Si j'ai bien compris tu veux déplacer un sprite d'une position A à une position B, il te faut donc réaliser une interpolation linéaire de sa position en fonction du temps (détail important, sinon la vitesse de déplacement variera en fonction de la puissance de ta machine). Autrement dit, déterminer l'équation de la droite passant par A et B (si tu sais pas comment faire je te laisse chercher sur google), faire le rapport du temps écoulé depuis le départ en A sur le temps total que tu veux pour que le sprite fasse tout le trajet, et enfin l'appliquer pour réaliser l'interpolation.
Si t'as toujours pas compris, au point A le coefficient vaut 0%, au point B 100%, et entre les deux il varie au cours du temps.  :)

PS: Poste un nouveau sujet quand t'as une nouvelle question (mais pas la peine d'inonder le forum non plus...)  ;)

20
Pourquoi faire un système d'expérience ? Tu crois que tous les jeux utilisent ce système ? On pourrait dire la même chose pour l'intelligence artificielle, ou le réseau, mais c'est déjà un peu moins spécifique à un type de jeu (quoi-que). Et puis quand bien même, pourquoi voudrait-on utiliser ceux-là plutôt que nos propres systèmes ? Sinon n'hésite pas, avant de te lancer dans tous les sens (et maintenant que t'as une base solide), à nous pondre quelques mini-jeux d'exemple histoire qu'on voit mieux les possibilités de ton framework, et pourquoi pas poster quelques screenshots des résultats. :)

21
Général / Re : Problème affichage dynamqique
« le: Février 11, 2014, 07:27:19 pm »
Tu n'aurais pas oublié le window.clear() par hasard ?  ::)

22
Graphique / Re : Meilleure technique de clipping ?
« le: Février 09, 2014, 07:14:54 pm »
L'imbrication des canevas semble bien fonctionner, bien que je sois parti sur la technique 2.
Je vais tester la technique de la sf::RenderTexture de mon côté pour ne pas polluer le forum avec un monologue.
Je passe donc ce post en résolu, mais si quelqu'un à des suggestions ou voudrait me conseiller une autre façon de faire je suis tout ouïe.  ::)

#include <SFML/Graphics.hpp>
#include <SFML/OpenGL.hpp>

struct Canevas : public sf::Drawable, public sf::Transformable {

        std::vector<sf::Drawable*> drawables;
        sf::FloatRect clipping;
        Canevas* parent_ = nullptr;

protected:

        void draw(sf::RenderTarget& target, sf::RenderStates states) const
        {
                states.transform.combine(getTransform());

                sf::FloatRect corrected_clipping = clipping;

                if( parent_ )
                {
                        sf::FloatRect parent_clipping = {parent_->clipping.left - getPosition().x, parent_->clipping.top - getPosition().y, parent_->clipping.width, parent_->clipping.height};
                        clipping.intersects(parent_clipping, corrected_clipping);
                }

                sf::Vector2f pos = states.transform.transformPoint({corrected_clipping.left, corrected_clipping.height + corrected_clipping.top});

                glPushAttrib(GL_SCISSOR_BIT);
                glEnable(GL_SCISSOR_TEST);
                glScissor(pos.x, target.getSize().y - pos.y, corrected_clipping.width, corrected_clipping.height);

                for( auto& drawable : drawables )
                        target.draw(*drawable, states);

                glDisable(GL_SCISSOR_TEST);
                glPopAttrib();
        }
};

int main()
{
        sf::RenderWindow window(sf::VideoMode(400, 400, 32), "Test");
        window.setVerticalSyncEnabled(true);

        /// CANEVAS 1 ///

        sf::RectangleShape shape1;
        shape1.setFillColor(sf::Color::Blue);
        shape1.setSize({200, 200});

        Canevas canevas1;
        canevas1.setPosition({50, 50});
        canevas1.clipping = {0, 0, 200, 200};
        canevas1.drawables.push_back(&shape1);

        /// CANEVAS 2 ///

        sf::RectangleShape shape2;
        shape2.setFillColor(sf::Color::Green);
        shape2.setSize({200, 200});

        sf::RectangleShape shape3;
        shape3.setPosition(50, 50);
        shape3.setFillColor(sf::Color::Red);
        shape3.setSize({200, 200});

        Canevas canevas2;
        canevas2.setPosition({50, 50});
        canevas2.clipping = {0, 0, 200, 200};
        canevas2.drawables.push_back(&shape2);
        canevas2.drawables.push_back(&shape3);

        /// CANEVAS 2 -> CANEVAS 1 ///

        canevas1.drawables.push_back(&canevas2);
        canevas2.parent_ = &canevas1;

        while( window.isOpen() )
    {
        sf::Event event;
     
        while( window.pollEvent(event) )
        {    
            if( event.type == sf::Event::Closed )
                window.close();
         
            else if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape )
                window.close();
        }

        window.clear();
        window.draw(canevas1);
        window.display();
    }

    return 0;
}

23
Graphique / Re : Meilleure technique de clipping ?
« le: Février 09, 2014, 06:21:32 pm »
Merci Laurent, je vais tester les deux solutions que tu me proposes et poster mes résultats sur ce forum.

24
Graphique / [Résolu] Meilleure technique de clipping ?
« le: Février 09, 2014, 05:24:57 pm »
Salut chère communauté !  :)

Je travaille actuellement sur un gros projet, mais je bloque malheureusement sur une technique en particulier.
Il s'agit d'utiliser une classe Canevas, dérivant de sf::Drawable et sf::Transformable et pouvant contenir d'autres sf::Drawable, donc potentiellement d'autres Canevas.
Le but est d'obtenir des espaces de dessin pouvant être décris les uns par rapport aux autres, jusque là, rien de sorcier.
Là ou je bloque, c'est pour la gestion du clipping. En effet, je souhaiterai que cet espace de dessin soit "fermé", qu'aucune entité dessinable enfant (peu importe son degrés de parenté), n'en sorte.

Après quelques recherches voici les pistes qui me sont données :

- Utiliser sf::View et son viewport : d'un côté ça m'arrange d'ajouter le système des vues à Canevas, d'un autre je n'ai jamais réussi à l'adapter correctement à mon problème malgré la doc.,
- Utiliser comme il sera présenté par la suite la fonction glScissor de openGL, solution intéressante mais néanmoins limitée dans mon cas, puisque dans mon exemple, seul le dernier appel à cette fonction est effectif,
- Utiliser les clipPlanes de openGL, mais parait-il ils sont très gourmands en ressources,
- Utiliser le stencil buffer, solution conseillée sur de nombreux forums.

J'ai donc simplifié le tout pour faire un exemple minimal directement compilable, utilisant la fonction glScissor :

#include <SFML/Graphics.hpp>
#include <SFML/OpenGL.hpp>

struct Canevas : public sf::Drawable, public sf::Transformable {

        std::vector<sf::Drawable*> drawables;
        sf::FloatRect clipping;

protected:

        void draw(sf::RenderTarget& target, sf::RenderStates states) const
        {
                states.transform.combine(getTransform());

                sf::Vector2f pos = states.transform.transformPoint({clipping.left, clipping.height + clipping.top});

                glPushAttrib(GL_SCISSOR_BIT);
                glEnable(GL_SCISSOR_TEST);
                glScissor(pos.x, target.getSize().y - pos.y, clipping.width, clipping.height);

                for( auto& drawable : drawables )
                        target.draw(*drawable, states);

                glDisable(GL_SCISSOR_TEST);
                glPopAttrib();
        }
};

int main()
{
        sf::RenderWindow window(sf::VideoMode(400, 400, 32), "Test");
        window.setVerticalSyncEnabled(true);

        /// CANEVAS 1 ///

        sf::RectangleShape shape1;
        shape1.setFillColor(sf::Color::Blue);
        shape1.setSize({200, 200});

        Canevas canevas1;
        canevas1.setPosition({50, 50});
        canevas1.clipping = {0, 0, 200, 200};
        canevas1.drawables.push_back(&shape1);

        /// CANEVAS 2 ///

        sf::RectangleShape shape2;
        shape2.setFillColor(sf::Color::Green);
        shape2.setSize({200, 200});

        sf::RectangleShape shape3;
        shape3.setPosition(50, 50);
        shape3.setFillColor(sf::Color::Red);
        shape3.setSize({200, 200});

        Canevas canevas2;
        canevas2.setPosition({50, 50});
        canevas2.clipping = {0, 0, 200, 200};
        canevas2.drawables.push_back(&shape2);
        canevas2.drawables.push_back(&shape3);

        /// CANEVAS 2 -> CANEVAS 1 ///

        canevas1.drawables.push_back(&canevas2);

        while( window.isOpen() )
    {
        sf::Event event;
     
        while( window.pollEvent(event) )
        {    
            if( event.type == sf::Event::Closed )
                window.close();
         
            else if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape )
                window.close();
        }

        window.clear();
        window.draw(canevas1);
        window.display();
    }

    return 0;
}



La vignette du milieu présente le résultat de l'exemple minimal, celle de gauche est le résultat du clipping désactivé et celle de droite le résultat attendu.

Quelle est d'après-vous la meilleure technique à employer, sachant que je recherche simplicité et performances avant-tout ?

Merci de votre soutien !  :D

25
Salut,
Connaissant la réponse de Laurent (et approuvant pour des raisons évidentes) je ne saurai que te conseiller de t'appuyer sur ce code en provenance du wiki :https://github.com/SFML/SFML/wiki/Source%3A-Drawable-Line-Shape

Cordialement

26
Projets SFML / Re : Framework
« le: Décembre 13, 2013, 07:17:31 pm »
Okay messieurs, gardons notre sérieux et laissons de côté le caractère récréatif de certaines réponses (on enfonce pas une porte ouverte). Un framework réalisé en commun est une très bonne idée en-soi, le forum pulule de projets de membres isolés, mais ou sont les grands projets communautaires qui feraient du bien à la SFML ?!  ;)

27
Projets SFML / Re : Framework
« le: Décembre 13, 2013, 03:16:40 pm »
Pinaise, ça exsude la modestie ici :D
Tu es peut être chevronné niveau théorie avec les cours que tu as fait à la fac, mais quand bien même tu obtiendras ton diplôme tu auras très peu de pratique en situation réelle, tu n'auras peu ou prou bossé sur un projet d'envergure. J'ai un peu l'impression que tu as été formaté sur certains trucs par tes profs, comme la non utilisation des pointeurs intelligents, car tu a appris a bien gérer la mémoire. Si ça marche pour de petits projets , c'est loin d'être évident dans de gros.
Si tu viens poser des questions ici c'est que quand même il te reste des trucs à apprendre, tu n'es pas au summum programmatiquement parlant. D'ailleurs, qui pourrait l'être ?
Y'a de bons conseils sur ce forum, avec des gens passionnés comme tu dis qui tentent de répondre à tes questionnements sur la meilleure façon de faire. Je te conseille d'écouter et de puiser un maximum de ressources, toi qui souhaite en faire ton boulot plus tard, sinon en monde professionnel tu seras vite concurrencé par de simples '42' sans diplôme (comprenne qui pourra) parce qu’ils seront plus productifs et innovants que toi, ou tout simplement car "tu te la ramèneras devant ton supérieur".
Tu arrêtes pas de parler du Java, tu as l'air vachement nostalgique de sa simplicité, mais en C++ il y a des subtilités qu'il faut prendre le temps d'assimiler et des innovations qu'il faut appréhender car elles simplifient grandement le code. Les pointeurs de fonction en sont une, et le temps que tu investiras en ouverture d'esprit tu le gagneras en pratique par la suite. Tu veux faire un framework simple, mais simple pour toi ou simple pour l'utilisateur ? Je te laisse le soin de répondre toi même à cette question.
A bon entendeur...  ::)

28
Projets SFML / Re : Framework
« le: Décembre 11, 2013, 06:17:36 pm »
Citer
Sinon je me demande si en c++ il y a moyen de lancer une exception à la compilation, ça, je trouve ça dommage que les compilateurs ne permettent pas de le faire. :/

tu peux utiliser assert, non ?

29
Projets SFML / Re : Framework
« le: Décembre 04, 2013, 03:40:05 pm »
OK. Je suis sur Mumble, j'attend que quelqu'un se connecte pour poser quelques questions.

30
Projets SFML / Re : Framework
« le: Décembre 04, 2013, 10:18:18 am »
Salut,

Est-ce que je peux éventuellement m'occuper de la partie GUI ?
Je bosse depuis pas mal de temps sur la mienne, j'aurai juste à adapter un peu le code pour la rendre opérationnelle.

PS: Voilà je me suis Mumblelisé  :D

anything