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

Auteur Sujet: Créer une caméra en utilisant sf::View  (Lu 1901 fois)

0 Membres et 1 Invité sur ce sujet

Armulis

  • Newbie
  • *
  • Messages: 33
    • Voir le profil
Créer une caméra en utilisant sf::View
« le: Octobre 04, 2014, 09:10:24 pm »
Bonjour!

J'ai écrit un programme qui fonctionne plutôt bien pour l'instant, mais je voudrais y ajouter une caméra.

La version actuelle construit une image en affichant sf::Sprites au-moyen de sf::RenderWindow.draw(). Toute Sprite est "drawée" directement pour apparaître à-l'écran.

Maintenant, je voudrais ajouter une caméra, mais j'ai du mal à trouver des informations sur internet.
Voici mon plan pour l'instant:
1. Je voudrais créer une RenderTexture et la "construire" en y "drawant" mes sprites. Ca donnera une grosse image.
2. Ensuite je voudrais faire un "focus" sur une zone de cette RenderTexture avec la View.
3. Enfin, je voudrais afficher la View.

Pour l'étape 1, je suis parfaitement au-clair. En-fait, je dois simplement remplacer la "RenderWindow" de la version actuelle (décrite plus haut) par la "RenderTexture".
Mais ensuite, comment faire le "focus" de ma View sur la Rendertexture?
Et finalement, comment afficher cette View dans la renderWindow, sachant que l'opération 3 doit adapter l'image virtuelle à la taille de l'écran (la RenderTexture étant dessinée au format 1920x1080, quelle que soit la dimension de l'écran, et la RenderWindow étant créée selon les dimensions de l'écran).

J'ai peut-être trouvé une piste: il y a une fonction "SetView()" dans RenderWindow et aussi dans RenderTexture. Mais dans quel ordre utiliser tout ça?

Merci pour les éclaircissements =D
« Modifié: Octobre 04, 2014, 09:18:39 pm par Armulis »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Créer une caméra en utilisant sf::View
« Réponse #1 le: Octobre 04, 2014, 10:45:00 pm »
Tu as au moins 3 façons de faire.

Note: (x, y, w, h) est la zone sur laquelle tu veux faire le "focus".

1. Tu affiches tout mais tu mets en place une vue qui zoome sur la zone intéressante
window.setView(sf::View(sf::FloatRect(x, y, w, h)));
window.draw(sf::Sprite(render_texture.getTexture()));

2. Tu ne dessines que la zone intéressante directement
window.draw(sf::Sprite(render_texture.getTexture(), sf::IntRect(x, y, w, h)));

3. Tu affiches tout mais tu mets en place une vue qui zoome sur la zone intéressante -- sans sf::RenderTexture intermédiaire qui ne sert à rien si ce n'est pas pour optimiser
window.setView(sf::View(sf::FloatRect(x, y, w, h)));
window.draw(... tous les composants de ton level ...);
Laurent Gomila - SFML developer

Armulis

  • Newbie
  • *
  • Messages: 33
    • Voir le profil
Re : Re : Créer une caméra en utilisant sf::View
« Réponse #2 le: Octobre 04, 2014, 11:24:13 pm »
1. Tu affiches tout mais tu mets en place une vue qui zoome sur la zone intéressante
window.setView(sf::View(sf::FloatRect(x, y, w, h)));
window.draw(sf::Sprite(render_texture.getTexture()));

Celle-ci me convient parfaitement, c'était un peu ce que j'imaginais.
C'est parfaitement clair, merci beaucoup!

 

anything