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

Auteur Sujet: TileMap avec VertexArray & une texture par tile  (Lu 2494 fois)

0 Membres et 1 Invité sur ce sujet

AnselmeSfml

  • Jr. Member
  • **
  • Messages: 78
    • Voir le profil
    • E-mail
TileMap avec VertexArray & une texture par tile
« le: Août 29, 2014, 06:53:25 pm »
Bonjour!

Aujourd'hui j'essaie de faire une tilemap à l'aide d'un sf::VertexArray. Seulement, j'aimerais savoir comment faire pour utiliser une texture par tuile et non pas une texture contenant toutes les tuiles. Comment, comme précisé dans le tutoriel, créer un VertexArray par texture? Deuxième question: pourrais-je récupérer les dimensions de la texture contenu dans ce vertexarray? Merci

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : TileMap avec VertexArray & une texture par tile
« Réponse #1 le: Août 29, 2014, 07:33:23 pm »
Citer
j'aimerais savoir comment faire pour utiliser une texture par tuile et non pas une texture contenant toutes les tuiles
Sache que là tu as choisi la pire des stratégies en terme de performances. Si tout le monde utilise des tilemaps c'est pas pour rien ;)

Citer
Comment, comme précisé dans le tutoriel, créer un VertexArray par texture?
Quel est ton problème ? C'est pas plus compliqué, sauf qu'au lieu de tout mettre dans le même vertex array, tu mets chaque nouvelle tile dans un nouveau vertex array. Et si tes vertex arrays ne contiennent chacun qu'une tile, alors l'intérêt est nul. Utilise des sf::Sprite.

Citer
Deuxième question: pourrais-je récupérer les dimensions de la texture contenu dans ce vertexarray?
???
Laurent Gomila - SFML developer

AnselmeSfml

  • Jr. Member
  • **
  • Messages: 78
    • Voir le profil
    • E-mail
Re : TileMap avec VertexArray & une texture par tile
« Réponse #2 le: Août 30, 2014, 10:53:59 am »
Re:
J'ai suivi le tutoriel présent sur le site. Je n'utilise désormais qu'une seule texture comme vous m'avez dis de faire, seulement, je ne comprend pas à quoi sert ce code:
                quad[0].position = sf::Vector2f(i * m_size.x, j * m_size.y);
                quad[1].position = sf::Vector2f((i + 1) * m_size.x, j * m_size.y);
                quad[2].position = sf::Vector2f((i + 1) * m_size.x, (j + 1) * m_size.y);
                quad[3].position = sf::Vector2f(i * m_size.x, (j + 1) * m_size.y);


                quad[0].texCoords = sf::Vector2f(tu * m_size.x, tv * m_size.y);
                quad[1].texCoords = sf::Vector2f((tu + 1) * m_size.x, tv * m_size.y);
                quad[2].texCoords = sf::Vector2f((tu + 1) * m_size.x, (tv + 1) * m_size.y);
                quad[3].texCoords = sf::Vector2f(tu * m_size.x, (tv + 1) * m_size.y);

J'ai bien compris la petite algorithme présente entre les parenthèses,  ce que je ne comprend pas, c'est pourquoi on doit définir quatre coins et leur position?
Merci
« Modifié: Août 30, 2014, 10:55:33 am par AnselmeSfml »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : TileMap avec VertexArray & une texture par tile
« Réponse #3 le: Août 30, 2014, 11:28:21 am »
Une tile est un carré, donc pour la définir il faut bien 4 points non ?
Laurent Gomila - SFML developer

AnselmeSfml

  • Jr. Member
  • **
  • Messages: 78
    • Voir le profil
    • E-mail
Re : TileMap avec VertexArray & une texture par tile
« Réponse #4 le: Août 30, 2014, 11:30:50 am »
C'est bon, il me semble que j'ai compris. Merci
« Modifié: Août 30, 2014, 11:37:46 am par AnselmeSfml »

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : TileMap avec VertexArray & une texture par tile
« Réponse #5 le: Août 30, 2014, 11:38:16 am »
Y'a pas 4 quads là, mais 4 sommets.
sf::Vertex* quad = &m_vertices[(i + j * width) * 4];
Ici tu récupères un pointeur sur un de tes sommets.
Et quand tu fais quad[0] tu accèdes à ce pointeur, quand tu fais quad[1] tu accèdes au pointeur qui suit, quad[2] le pointeur 2 positions plus loin etc.
Donc si quad est un pointeur sur m_vertices[24] (par exemple) quand tu fais quad[0] c'est comme si tu faisais m_vertices[24], quad[1] est pareil que m_vertices[25], etc.
Le tutoriel n'est qu'un exemple, si ça te perturbes ou que ça te plait pas tu peux utiliser directement m_vertices. ;)

AnselmeSfml

  • Jr. Member
  • **
  • Messages: 78
    • Voir le profil
    • E-mail
Re : TileMap avec VertexArray & une texture par tile
« Réponse #6 le: Août 30, 2014, 11:57:48 am »
Merci, c'est beaucoup plus clair comme cela. Mais je ne comprend donc pas pourquoi accéder de cette manière aux sommets qui suivent? Ne peut-on pas les traiter individuellement, on est obligé de les traiter 4 par 4?
« Modifié: Août 30, 2014, 12:00:51 pm par AnselmeSfml »

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : TileMap avec VertexArray & une texture par tile
« Réponse #7 le: Août 30, 2014, 02:33:43 pm »
Bah parce que dans l'exemple on traite quad par quad, et 1 quad c'est 4 sommets.
Tu fais tout comme tu veux tant que tu sais ce que tu fais.