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

Auteur Sujet: [SFML2] Optimisation déplacement  (Lu 6502 fois)

0 Membres et 1 Invité sur ce sujet

Archimed78

  • Newbie
  • *
  • Messages: 35
    • Voir le profil
[SFML2] Optimisation déplacement
« le: Octobre 30, 2012, 05:01:33 pm »
Bonjour a tous, merci d'avance pour la/les futurs réponses que vous pourriez m'apporter.

J'ai un problème lors du déplacement de plusieurs sprites a la suite.
J'ai une map de 20*20 cases (sa peu varier) avec des sprites de 32px. Mais cette map est constitué de 3 couches successive. J'ai donc 20*20+20*20+20*20 = 1200 sprites afficher. En réalité les couches 2 et 3 ne sont pas pleine donc sa fais relativement moins. Mais théoriquement on pourrais allé a 1200 sprites max.

Lors de l'affichage aucun soucis, mais lors du déplacement (move de sf::Sprite) de chaque sprite pour faire déplacer la map, la il y a une sacré chute du FPS.

Ma question est donc la suivante : Existe t'il un moyen de déplacement toute la map sans attiré les foudres du FPS ? Existe t'il un conteneur permettant de déplacement tout ce petit monde et donc évité 1200 tour de boucles ?

Je vous remercie énormément.

Cordialement.

lezebulon

  • Full Member
  • ***
  • Messages: 235
    • Voir le profil
Re : [SFML2] Optimisation déplacement
« Réponse #1 le: Octobre 30, 2012, 06:44:10 pm »
ben sf::View...

Koryushin

  • Jr. Member
  • **
  • Messages: 93
    • Voir le profil
Re : [SFML2] Optimisation déplacement
« Réponse #2 le: Octobre 30, 2012, 07:59:15 pm »
Pour plus de précisions  ;D au lieu de déplacer tous tes sprites dans une direction ben tu déplace une sf::view dans la direction opposée   :P

Archimed78

  • Newbie
  • *
  • Messages: 35
    • Voir le profil
Re : [SFML2] Optimisation déplacement
« Réponse #3 le: Octobre 30, 2012, 10:05:39 pm »
Merci bien, je ne connaissais pas les sf::View, mais au niveau de performance (a part évite les 1200 boucles), comment est-ce géré ? Comment cela améliora les performances ?

Je vais de mon coté bien évidemment travaillé la dessus et vous tenir informé.

Merci beaucoup,

Cordialement.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML2] Optimisation déplacement
« Réponse #4 le: Octobre 30, 2012, 10:30:08 pm »
Citer
Comment cela améliora les performances ?
Les vues ne coûtent pas un copec. C'est totalement gratuit, ça n'implique aucun calcul en plus.

Citer
comment est-ce géré ?
Ca change la matrice de projection d'OpenGL. Si ça ne te parle pas, on va éviter d'entrer dans le détail, ce serait un peu compliqué à expliquer :P
Laurent Gomila - SFML developer

Archimed78

  • Newbie
  • *
  • Messages: 35
    • Voir le profil
Re : [SFML2] Optimisation déplacement
« Réponse #5 le: Octobre 30, 2012, 11:16:40 pm »
Merci, j'adopte alors  ;D

Je vais faire mes tests pour voir comment cela fonctionne.

Merci beaucoup,

Cordialement.

Archimed78

  • Newbie
  • *
  • Messages: 35
    • Voir le profil
Re : [SFML2] Optimisation déplacement
« Réponse #6 le: Octobre 31, 2012, 03:20:23 pm »
J'ai donc testé le déplacement de la map avec les sf::View, au niveau des performances sa ne change pas au final, vu que a chaque fois on a besoin de redessiné toute la map, quand je parlai de conteneur, je parlai uniquement d'un ensemble de sprites que une fois chaque tiles chargé, ceci forme une "image" complète et il n'y a plus que a la déplacer. De plus avec ce type d'affichage je me retrouve avec des traits noir entre les tiles parfois, lors des déplacement.

Auriez-vous une astuce pour me dépatouiller ? ^^

Merci beaucoup,

Cordialement.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML2] Optimisation déplacement
« Réponse #7 le: Octobre 31, 2012, 03:40:23 pm »
Citer
De plus avec ce type d'affichage je me retrouve avec des traits noir entre les tiles parfois, lors des déplacement.
C'est une conséquence des coordonnées non-entières. Du coup, si tu te débrouille pour que ta vue bouge toujours d'un nombre entier d'unités, ça devrait le faire.

Citer
quand je parlai de conteneur, je parlai uniquement d'un ensemble de sprites que une fois chaque tiles chargé, ceci forme une "image" complète et il n'y a plus que a la déplacer
Vertex array (SFML 2).
Laurent Gomila - SFML developer

Archimed78

  • Newbie
  • *
  • Messages: 35
    • Voir le profil
Re : [SFML2] Optimisation déplacement
« Réponse #8 le: Octobre 31, 2012, 04:14:00 pm »
Merci Laurent, effectivement sa parais plus que logique pour les coordonnées non-entières. Je vais rectifier ceci.

Et je vais faire mes tests sur ce que tu a dit, les Vertex array.

Merci beaucoup,

Cordialement.

Archimed78

  • Newbie
  • *
  • Messages: 35
    • Voir le profil
Re : [SFML2] Optimisation déplacement
« Réponse #9 le: Octobre 31, 2012, 09:42:55 pm »
J’avoue avoir du mal a comprendre comment on se sert des sf::VextexArray  :o

je vais continuer mes recherches.

Cordialement.

Edit : Plus j’essaie de comprendre et plus je me perd... Je ne comprend pas quel est le rapport entre les Vertex et mon problème de sprite  :-\
« Modifié: Octobre 31, 2012, 10:30:02 pm par Archimed78 »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML2] Optimisation déplacement
« Réponse #10 le: Octobre 31, 2012, 10:39:45 pm »
Oui désolé, tant qu'il n'y a pas de tutoriel il est assez difficile d'expliquer les vertex arrays.

En fait un sprite est un vertex array figé (contenant 4 vertex, qui forment un quad). Le but c'est d'avoir ton propre vertex array qui contient tes 1200 sprites, formant ainsi une seule grosse entité manipulable comme un seul sprite.

Une autre manière d'aborder les vertex arrays, c'est de comprendre qu'ils sont le bas niveau de SFML. Tout le reste (Text, Shape, Sprite) est construit par dessus -- ils ont tous un vertex array en interne. Donc là tu vas construire ton propre type de drawable, avec son, propre vertex array.
Laurent Gomila - SFML developer

Archimed78

  • Newbie
  • *
  • Messages: 35
    • Voir le profil
Re : [SFML2] Optimisation déplacement
« Réponse #11 le: Octobre 31, 2012, 11:42:00 pm »
Merci, je comprend mieux ! mais dans mon cas aurai-tu un petit code explicatif pour que puisse faire des tests, par ce que je ne trouve rien pour ajouter mes sprites dans le vertex array... ou bien j'ai encore rien compris  ;D Ce qui est fort probable.

Merci pour le temps que tu m'accorde en tout cas,

Cordialement.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML2] Optimisation déplacement
« Réponse #12 le: Novembre 01, 2012, 10:37:02 am »
Le vertex array n'est qu'un tableau de sf::Vertex. Il n'y a pas de sprite ou autre, c'est une interface un peu plus bas niveau. Il faut définir tous les points (vertex) un à un, avec la bonne position, couleur et coordonnées de texture.

Il doit y avoir des exemples qui traînent sur le forum anglais.
Laurent Gomila - SFML developer

Archimed78

  • Newbie
  • *
  • Messages: 35
    • Voir le profil
Re : [SFML2] Optimisation déplacement
« Réponse #13 le: Novembre 02, 2012, 03:28:08 am »
J'ai réussi a tout faire comme il faut (merci Laurent), sauf que la classe sf::VertexArray n'est pas composé de la méthode "move".

Dois-je a chaque fois supprimer tout le vertex pour le refaire ensuite avec un offset en x et y pour faire un déplacement ?

Je vous remercie chaleureusement de votre aide,

Cordialement.

Koryushin

  • Jr. Member
  • **
  • Messages: 93
    • Voir le profil
Re : [SFML2] Optimisation déplacement
« Réponse #14 le: Novembre 02, 2012, 07:39:44 am »
Non, tu affiches ton sf::vertexarray avec sa texture, et ensuite tu n'as plus qu'à déplacer ta sf::view.