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

Auteur Sujet: Combiner des sprites en une sprite unique  (Lu 3929 fois)

0 Membres et 1 Invité sur ce sujet

Cmdu76

  • Full Member
  • ***
  • Messages: 194
    • Voir le profil
Combiner des sprites en une sprite unique
« le: Février 07, 2013, 11:20:09 pm »
Bonjour,
je cherche à créer une grande sprite composées de plusieurs petites sprites.

Merci de votre aide :)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Combiner des sprites en une sprite unique
« Réponse #1 le: Février 08, 2013, 08:17:39 am »
Quelle version de SFML ?
Laurent Gomila - SFML developer

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : Combiner des sprites en une sprite unique
« Réponse #2 le: Février 08, 2013, 12:08:58 pm »
Bah si tu utilises la SFML 2.0 c'est possible, en utilisant une RenderTexture qui est une grande texture combinée avec plusieurs textures, cependant j'ai eu quelques soucis, comme une RenderTexture agit comme une RenderWindow, j'ai du lui mettre une vue sinon lorsque je me déplaçais mes ombres ne s'affichaient plus.
J'ai du aussi déplacer ma grande texture sur ma fenêtre et la mettre à la position de ma vue sinon, mes ombres ne se déplaçaient pas en même temps que la vue, donc en gros tu fais ceci :
renderWindow.clear();
RenderTexture rText;
rText.create(size.x, size.y);
rText.setView(view);
rText.clear();
//Tu dessines tes sprites sur ta RenderTexture. (rText.draw(sprite));
rText.display();
Vector2f position(view.getCenter().x - view.getSize().x * 0.5f, view.getCenter().y - view.getSize().y * 0.5f);
Sprite bigSprite (view.getTexture());
bigSprite.setPosition(position);
renderWindow.draw(bigSprite);
 
Et ça marche nickel. ;)

« Modifié: Février 08, 2013, 12:13:42 pm par Lolilolight »

Cmdu76

  • Full Member
  • ***
  • Messages: 194
    • Voir le profil
Re : Combiner des sprites en une sprite unique
« Réponse #3 le: Février 08, 2013, 04:32:35 pm »
J'utilise SFML 2.0,

Besoin de définir une taille pour la view ?
Et sinon, si j'utilisais pas les views, seulement les RenderTexture, ça marche comme une RenderWindow, sauf qu'elle peut devenir une Sprite ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Combiner des sprites en une sprite unique
« Réponse #4 le: Février 08, 2013, 05:02:33 pm »
T'inquiète pas pour les vues, ça n'a rien à voir. C'est spécifique à l'application de Lolilolight, pas aux render-textures ;)

Sinon oui, ça marche comme sf::RenderWindow sauf que ça dessine dans un sf::Texture.

Si tu as juste besoin de copier des morceaux de texture dans une plus grosse texture, tu peux aussi utiliser sf::Image  et sa fonction copy.
Laurent Gomila - SFML developer

Cmdu76

  • Full Member
  • ***
  • Messages: 194
    • Voir le profil
Re : Combiner des sprites en une sprite unique
« Réponse #5 le: Février 08, 2013, 05:49:30 pm »
Merci beaucoup Laurent (un développeur aussi présent c'est vraiment super !), je vais plutôt utiliser les RenderTexture ducoup ;)


Sutat

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
    • E-mail
Re : Combiner des sprites en une sprite unique
« Réponse #6 le: Février 08, 2013, 06:48:27 pm »
Attention au RenderTexture.

J'ai ce problème en ce moment sur les vieilles machines :
Tu risques de créer une texture qui est trop grande pour la carte graphique.
Du coup un programme qui marche chez toi pourrait ne pas fonctionner chez quelqu'un d'autre.
Je ne me suis pas encore penché sur le problème mais en lisant le forum un peu au hasard (:p) j'ai vu Laurent parlé de BigTexture (librairie Thor) et de sf::Image (en gros refaire ce que fait Thor).

L'idée est de découper l'image en plusieurs petites textures.
Quand la texture est toute faite, c'est relativement facile (une texture en .png par exemple).
Mais quand tu dois la construire dynamiquement comme je le fais (donc dans un RenderTexture) je ne sais pas si c'est aussi simple.

Bon ce poste ne sert peut être à rien, mais je t'avertis au cas où.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Combiner des sprites en une sprite unique
« Réponse #7 le: Février 08, 2013, 08:34:31 pm »
Oui, il y a en effet une taille limite aux textures, et donc aux render-textures. Du coup si le but est de pré-dessiner des choses, j'ai plutôt tendance à conseiller une approche radicalement différente, à base de vertex array.
Laurent Gomila - SFML developer

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : Combiner des sprites en une sprite unique
« Réponse #8 le: Février 09, 2013, 08:50:59 am »
Ha. :o

Chez moi les RenderTexture ça marche, la vue ce n'est spécifique que à mon application, enfin c'est plutôt un jeux que je fais, bref...
Sinon tu peux aussi faire comme le dit Laurent : faire une capture et copier l'image dans une texture, je pense que c'est la méthode update mais chez moi, ça plante, ça m'affiche le message suivant dans la console :
Assertion failed : x + width <= m_size.x, D:\developpement\sfml-master\src\SFML\Graphics\Texture.cpp, line 315.

Au fait Laurent j'ai essayer ton idée de créer une RenderTexture avec des coordonnées négatives pour l'inverser, mais ça ne marche pas ça me met le message suivant :

Failed to create render texture, it's internal size is too high (4294966796x500.) mais quand je mets des tailles positives ça marche.

nicooomg

  • Jr. Member
  • **
  • Messages: 66
    • Voir le profil
Re : Combiner des sprites en une sprite unique
« Réponse #9 le: Février 28, 2013, 09:48:41 am »
Ne pas oublier que pour une RenderTexture, il faut suivre ceci:

        sf::RenderTexture final_texture;
        final_texture.create(width, height);
        final_texture.clear(sf::Color::Transparent); // Ou une autre couleur

        // Tu dessines ici ...


        final_texture.display();

A partir de ce moment, tu as une belle image toute prete :)