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

Auteur Sujet: Dessiner un grand nombre de tiles grâce à un VertexArray  (Lu 2508 fois)

0 Membres et 1 Invité sur ce sujet

clements

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Dessiner un grand nombre de tiles grâce à un VertexArray
« le: Juin 01, 2015, 09:19:47 am »
Bonjour,
Je suis en train de réaliser un éditeur de tilemap à l'aide de la SFML, j'utilise un VertexArray pour effectuer le rendu de la map mais ça ne semble pas suffisant, j'ai quelques soucis de performance.
En fait je cherche à pouvoir faire le rendu d'une tilemap dans son intégralité sur l'écran,
pour les maps < 1000*1000 tiles, j'ai pas trop de souci, mais pour des maps plus grandes le framerate en prend un sacré coup et ça semble demander beaucoup de boulot au GPU et mon vertex array consomme énormément de mémoire vive (logique).

Je suis donc à la recherche d'une solution permettant d'afficher un très grand nombre de tiles à l'écran en limitant l'impact sur les performances.

Autre question, quand il sagira du jeu en lui même, il ne sera plus nécessaire d'afficher toutes les tiles de la map à l'écran, est-il toujours possible d'utiliser le vertex array en limitant la zone rendue ?
« Modifié: Juin 01, 2015, 09:36:56 am par clements »

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Dessiner un grand nombre de tiles grâce à un VertexArray
« Réponse #1 le: Juin 01, 2015, 10:55:24 am »
Tu peux peut-être tout dessiner une seule fois sur une RenderTexture (puis ensuite l'afficher avec un sprite). Ça prendra du temps juste au moment de dessiner tout ton vertex array mais pour les frames suivantes ça te coutera juste un sprite.

clements

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Re : Dessiner un grand nombre de tiles grâce à un VertexArray
« Réponse #2 le: Juin 01, 2015, 11:03:02 am »
Le souci c'est qu'il n'est pas possible de créer une RenderTexture d'une telle taille.

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Dessiner un grand nombre de tiles grâce à un VertexArray
« Réponse #3 le: Juin 01, 2015, 11:15:48 am »
En fait je cherche à pouvoir faire le rendu d'une tilemap dans son intégralité sur l'écran
Le souci c'est qu'il n'est pas possible de créer une RenderTexture d'une telle taille.
Bah tu veux tout afficher sur l'écran, t'as pas besoin d'une RenderTexture plus grande que la taille de l'écran donc non ? C'est trop ?

Y'a du scrolling sur ta "map" ? Tu peux découper en plusieurs vertex arrays et n'afficher que ceux qui sont visibles. (et faire de même en jeu)

clements

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Re : Dessiner un grand nombre de tiles grâce à un VertexArray
« Réponse #4 le: Juin 01, 2015, 12:26:59 pm »
L'idée c'est de pouvoir unzoom sur ma map pour la voir de manière globale (donc visible dans son intégralité sur l'écran), j'utilise les fonctionalités des sf::View pour gérer le niveau zoom.
Chacune de mes tiles font 32px de côté.
Prenons le cas extrême d'une map de 4000*4000tiles, il me faudrait une texture de 4000*32 = 128000px de côté sur laquelle je vais ensuite devoir dezoomer afin de l'avoir sur l'écran.

Je vois mal comment faire ça avec une RenderTexture de la taille de l'écran.

Voilà ce que je fais actuellement avec une map de 400*400tiles:
Donc ce que je veux c'est pouvoir faire ça avec beaucoup plus de tiles en limitant l'impact sur les performances.

Nikogram

  • Newbie
  • *
  • Messages: 39
    • Voir le profil
    • E-mail
Re : Dessiner un grand nombre de tiles grâce à un VertexArray
« Réponse #5 le: Juin 03, 2015, 03:46:04 pm »
Un moyen de faire pourrait être de fusionner les tuiles qui sont cotes à cotes, et hormis le cas extrême où l'utilisateur place une tuile une fois sur deux, je pense que ça peut grandement améliorer les performances et en plus tu auras moins de mémoire utilisée.

En gros quand tu as par exemple 2 tuiles cotes à cotes (ça peut être plus) tu crées à la place une tuile de 32*64 px.
Par contre il faudra aussi faire une répétition de la texture pour garder le même aspect, et si tu mets toutes tes textures dans un seul fichier image ça risque d'être problématique par contre (à moins qu'on puisse quand même répéter une partie de la texture ? ).