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

Auteur Sujet: Utilisation des VertexArray et des Sprites  (Lu 3326 fois)

0 Membres et 1 Invité sur ce sujet

Berto

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Utilisation des VertexArray et des Sprites
« le: Juillet 17, 2013, 01:11:51 pm »
Bonjour à tous !
Je débute avec la SFML et après avoir suivi le tuto sur Concevoir ses entités avec les tableaux de vertex, je me pose des questions quant à l'utilisation des VertexArray et des sprites classiques.
Si j'ai bien compris on utilise plutôt les vertex array pour tout ce qui est statique (décor) alors que la classe sprite sera plutôt utilisé pour le personnage et tout ce qui est mobile, c'est bien cela ? On a donc au final un Draw pour le vertex array, et un (ou plusieurs) Draw(s) pour le(s) sprite(s) mobile(s) ?
Merci d'avance !

gostron

  • Jr. Member
  • **
  • Messages: 53
    • Voir le profil
Re : Utilisation des VertexArray et des Sprites
« Réponse #1 le: Juillet 17, 2013, 01:29:20 pm »
Tres legere reponse pour ce que j'en comprends.

On peut utiliser les vertex array des qu'on a besoin d'une seule texture.

De maniere generale on essaye de minimiser les apppels a la fonction draw car c'est elle qui est le plus chronophage, donc on utilise au maximum les vertex array mais c'est vrai que ca parait peu intuitif d'utiliser un seul vertex array pour ses 5 personnages s'ils sont independants parce que ca risque de devenir complexe dans l'utilisation. Les vertex array sont parfait pour les maps a cases (tilemap) et choses comme ca. Personnellement j'en ai utilise principalement pour le decor comme 200 chaises et tables et quelques tapis (que j'ai ensuite transforme en une texture unique pour avoir un seul appel final car ma map etait statique).

Si quelqu'un peut donner une reponse plus exacte et/ou precise je serais ravi d'en apprendre davantage aussi

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : Utilisation des VertexArray et des Sprites
« Réponse #2 le: Juillet 17, 2013, 01:34:02 pm »
Bah moi je fais comme ça :

VertexArray pour tout ce qui est statique. (Mais ça me pose des problèmes quand j'ai des décors statiques qui peuvent se trouver devant ou derrière des autres décors statiques qui sont sur des textures différentes.
(Exemple : avec l'éditeur de map je dessine un mur autour d'une maison, certains vertex de la texture du mur doivent s'afficher devant les vertex de la texture de la maison et les autres, derrière.)

Vu que avec la tilemap dans le tutoriel de Laurent on est obligé de dessiner tout les décors (c'est à dire tout les vertex) qui utilisent la même texture d'un coup et que de plus on ne peut pas utiliser plusieurs textures par tilemap, cela n'est pas bien dans mon cas, donc, même pour les décors statiques j'utilise des sprites que j'insère dans une liste dans l'ordre dans lequel ils doivent être affiché et non pas des vertexarray.

Actuellement je suis entrain de modifier SFML pour activer le depthtest et pour pouvoir mettre une composante z pour chaque vertex de manière à ne plus être obligé de devoir dessiner tout mes vertex dans l'ordre dans lesquels je veux les afficher et minimiser les appels à draw.

Donc je te conseilles d'utiliser les vertexarray que si tes décors statiques utilisant la même texture ne s'affichent que sur une seule et même couche, sinon, il faudra modifier SFML.

Sinon, si tu utilises plusieurs couches, utilises des sprites, c'est mieux.

Pour les entités semi-transparente par contre comme les lumières et les ombres, les rendertextures c'est le mieux.

Car même en modifiant SFML, le depthtest ne marchera pas sur tout ce qui est semi-transparent.
« Modifié: Juillet 17, 2013, 01:39:46 pm par Lolilolight »

Berto

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Re : Utilisation des VertexArray et des Sprites
« Réponse #3 le: Juillet 17, 2013, 02:01:35 pm »
Merci pour vos réponses très rapides ! Donc du coup il n'y a pas tellement de pertes de performances à n'utiliser  que des sprites même pour les décors statiques ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Utilisation des VertexArray et des Sprites
« Réponse #4 le: Juillet 17, 2013, 02:27:29 pm »
Citer
Donc du coup il n'y a pas tellement de pertes de performances à n'utiliser  que des sprites même pour les décors statiques ?
Ca dépend combien t'en as.
Laurent Gomila - SFML developer

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Utilisation des VertexArray et des Sprites
« Réponse #5 le: Juillet 17, 2013, 02:43:17 pm »
Bah.
Le test est vite fait. Dessine des tiles 8px * 8px sur tout un écran de 800 * 600 (7500 tiles donc). Fais ça avec que des sprites, et ensuite avec juste un vertex array, tu verras la différence. ;)

C'est pas juste pour ce qui est statique (et pis les décors sont pas forcément statiques), si t'as plein de trucs en mouvement qui utilisent une même texture un vertex array sera plus intéressant que des sprites. (par exemple pour des particules) Mais si t'utilises des sprites pour les 10 personnages qui sont affichés sur ton écran ça va pas tuer tes perfs.  :D
(pis si t'as pas mal d'animations, y'a des chances pour qu'ils utilisent des textures différentes de toutes façons)

Bref, faut voir ce que tu veux faire. T'as pas forcément besoin de meilleures perf. Sur un vieux PC (genre moyen de gamme d'y a 7-8 ans...) je peux faire tourner à 60fps des jeux avec tilemap composée juste de sprites.
« Modifié: Juillet 17, 2013, 02:47:22 pm par G. »

Berto

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Re : Re : Utilisation des VertexArray et des Sprites
« Réponse #6 le: Juillet 17, 2013, 02:57:32 pm »
Ca dépend combien t'en as.
A vrai dire, ma question initiale était à titre informatif, donc je ne pourrais pas répondre précisément ! Mais dans le cas d'un jeu qui utilise le tilemapping (mario-like, zelda-like, etc) je suppose qu'il doit y avoir un nombre conséquent de textures différentes sur un même tileset ; les VertexArray sont donc à privilégier ?
D'ailleurs pour créer le mouvement, il suffirait de modifier l'attribut position des 4 vertex qui forment un quad ? Et dans ce cas pour créer l'animation d'un personnage, il suffit de changer l'attribut texCoords sur la tileset au fur et à mesure ?
Merci de vos réponses :)

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : Utilisation des VertexArray et des Sprites
« Réponse #7 le: Juillet 17, 2013, 07:41:42 pm »
Bah moi je fais pour mes animations une listes de sprites qui s'affichent les uns après les autres et je change la position des sprites si il y a lieu.