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

Auteur Sujet: VertexArray & Isometric mapping  (Lu 3684 fois)

0 Membres et 1 Invité sur ce sujet

AnselmeSfml

  • Jr. Member
  • **
  • Messages: 78
    • Voir le profil
    • E-mail
VertexArray & Isometric mapping
« le: Août 31, 2014, 09:23:34 pm »
Bonjour!

Me revoilà aujourd'hui pour reparler de VertexArray  ::)^
Sachant que je fais du mapping isometrique, je dois changer l'algorithme de définitions des sommets de chaque quad. J'ai fait cela:
quad[0].position = sf::Vector2f((m_floorSize)*(j-i), (m_floorSize*(j+i)/2));
quad[1].position = sf::Vector2f((m_floorSize)*(j-i+1), (m_floorSize*(j+i)/2));
quad[2].position = sf::Vector2f((m_floorSize)*(j-i+1), (m_floorSize*(j+i+2)/2));
quad[3].position = sf::Vector2f((m_floorSize)*(j-i), (m_floorSize*(j+i+2)/2));


quad[0].texCoords = sf::Vector2f(tu * m_tileSize.x, tv * m_tileSize.y);
quad[1].texCoords = sf::Vector2f((tu + 1) * m_tileSize.x, tv * m_tileSize.y);
quad[2].texCoords = sf::Vector2f((tu + 1) * m_tileSize.x, (tv + 1) * m_tileSize.y);
quad[3].texCoords = sf::Vector2f(tu * m_tileSize.x, (tv + 1) * m_tileSize.y);
 
J'ai mis entre les crochets de définition des positions l'algorithme de transformation de coord. cartesiennes en isométrique. Mais je ne comprend pas pourquoi j'obtiens ce résultat!

Merci d'avance.


AnselmeSfml

  • Jr. Member
  • **
  • Messages: 78
    • Voir le profil
    • E-mail
Re : VertexArray & Isometric mapping
« Réponse #1 le: Septembre 01, 2014, 02:25:59 pm »
S'il vous plait :( Il y a bien quelqu'un qui en sait plus sur les vertexarray et ou placer l'algorithme non? :( :(  :-[ Je vous en supple

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : VertexArray & Isometric mapping
« Réponse #2 le: Septembre 01, 2014, 02:36:27 pm »
Une demi-journée c'est peu pour bumper un sujet. C'est un forum, pas un chat, si les gens viennent une fois dans la journée c'est déjà pas mal. Donc merci de ne pas s'exciter et de prendre son mal en patience ;)

Ensuite, ton problème est difficile à appréhender : sur la capture d'écran il y a plein de tiles, certaines sont bonnes et pour le reste on ne sait pas trop ce qu'on voit. Ce serait bien de faire un exemple minimal avec juste une tile foireuse, et de montrer le code correspondant.
Laurent Gomila - SFML developer

AnselmeSfml

  • Jr. Member
  • **
  • Messages: 78
    • Voir le profil
    • E-mail
Re : VertexArray & Isometric mapping
« Réponse #3 le: Septembre 01, 2014, 02:40:00 pm »
J'ai fait un up car de toute façon, d'ici 1h plus personne le verrait et je sais que je n'avais pas de réponses. C'est bien ça le problème, moi non plus je ne vois pas ce qui se passe. Je ne sais a vrai dire même pas pourquoi ça fait n'importe quoi comme ça! Le code il est simple, c'est un copié-collé de l'exemple du site mais avec ce que j'ai cité modifié.
« Modifié: Septembre 01, 2014, 02:49:38 pm par AnselmeSfml »

AnselmeSfml

  • Jr. Member
  • **
  • Messages: 78
    • Voir le profil
    • E-mail
Re : VertexArray & Isometric mapping
« Réponse #4 le: Septembre 01, 2014, 02:44:00 pm »
Quand il y a qu'un seul tile à afficher il s'affiche correctement: dès qu'il y en a + de 2 ça fait des grosses textures étirées horizontalement.

AnselmeSfml

  • Jr. Member
  • **
  • Messages: 78
    • Voir le profil
    • E-mail
Re : VertexArray & Isometric mapping
« Réponse #5 le: Septembre 01, 2014, 02:46:46 pm »
Et je ne sais pas d'ou ça vient. Par quoi peuvent être provoqués des textures étirées comme ça? je suis le premier à avoir ce problème,

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : VertexArray & Isometric mapping
« Réponse #6 le: Septembre 01, 2014, 03:09:05 pm »
Dans ce cas, il faut que tu écrives un code complet minimal qui reproduit le problème.

Lit ceci attentivement : http://sscce.org/
Laurent Gomila - SFML developer

AnselmeSfml

  • Jr. Member
  • **
  • Messages: 78
    • Voir le profil
    • E-mail
Re : VertexArray & Isometric mapping
« Réponse #7 le: Septembre 01, 2014, 03:11:33 pm »
Ce code c'est le même que celui présent sur l'exemple tilemap de la page "design your own entities" . Avec les définitions modifiés comme précisé plus haut. De toute façon le problème vient du code cité plus haut. En quoi le reste peut être utile? J'ai absolument tout mis: une image, et là ou ça coince. Je sais que t'es pro et que t'aimes bien les choses bien faites, mais pour les nuls comme moi faut faire avec ce qu'on a.
« Modifié: Septembre 01, 2014, 03:16:45 pm par AnselmeSfml »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : VertexArray & Isometric mapping
« Réponse #8 le: Septembre 01, 2014, 03:25:03 pm »
Le lien que je t'ai donné explique très bien et en détail pourquoi le code complet minimal est nécessaire, pour toi et pour nous. Si tu n'as pas compris je ne sais pas quoi te dire d'autre, mais dans ce cas prend ton mal en patience car tu n'auras pas beaucoup d'aide.
Laurent Gomila - SFML developer

AnselmeSfml

  • Jr. Member
  • **
  • Messages: 78
    • Voir le profil
    • E-mail
Re : VertexArray & Isometric mapping
« Réponse #9 le: Septembre 01, 2014, 03:28:24 pm »
Bon pas grave j'abandonne je ne peut pas faire 2 m sans rencontrer un problème de toute façon merci quand meme :)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : VertexArray & Isometric mapping
« Réponse #10 le: Septembre 01, 2014, 03:56:36 pm »
N'essaye pas de brûler les étapes. Aborde les problèmes étape par étape, n'essaye pas de faire le truc final du premier coup, et fais les choses d'une manière que tu comprends, même si ce n'est pas la plus optimisée -- ce genre de chose viendra plus tard.

Par exemple pour ton problème de mapping, dessine une seule tile, avec des coordonnées hard-codées (et non calculées), puis une seconde, etc. Puis essaye de factoriser le calcul des coordonnées, etc. Sois à l'aise avec une étape avant de passer à la suivante. Y a aucune raison de buter sur ce genre de problème si on y va petit à petit ;)
Laurent Gomila - SFML developer

AnselmeSfml

  • Jr. Member
  • **
  • Messages: 78
    • Voir le profil
    • E-mail
Re : VertexArray & Isometric mapping
« Réponse #11 le: Septembre 01, 2014, 06:20:51 pm »
Je vais essayer de prendre en compte ces conseils, merci.
C'est en effet une bonne idée de placer à l'arrache et ensuite d'essayer de trouver une formule.
Je vous tiens au courant

AnselmeSfml

  • Jr. Member
  • **
  • Messages: 78
    • Voir le profil
    • E-mail
Re : VertexArray & Isometric mapping
« Réponse #12 le: Septembre 01, 2014, 07:02:56 pm »
J'ai commencé à faire cela mais lors de la définition des sommets du deuxième quads, si je le place au même endroit que le premier, ça dessine le sprite coupé dans la diagonale? Pourquoi?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : VertexArray & Isometric mapping
« Réponse #13 le: Septembre 01, 2014, 08:01:09 pm »
C'est pas très clair... code + screenshot please :P
Laurent Gomila - SFML developer

AnselmeSfml

  • Jr. Member
  • **
  • Messages: 78
    • Voir le profil
    • E-mail
Re : VertexArray & Isometric mapping
« Réponse #14 le: Septembre 01, 2014, 08:26:40 pm »
Oui pardon :p
void Map::setConfiguration(const int *configuration, unsigned int width, unsigned int height)
{
    m_height = height;
    m_width = width;

    m_vertices.setPrimitiveType(Quads);
    m_vertices.resize(m_width*m_height*4);

                sf::Vertex *quad = &m_vertices[0];
                sf::Vertex *quad2 = &m_vertices[1];

                quad[0].position = Vector2f(0, 0);
                quad[1].position = Vector2f(50, 0);
                quad[2].position = Vector2f(50, 56);
                quad[3].position = Vector2f(0, 56);

                quad[0].texCoords = Vector2f(0, 0);
                quad[1].texCoords = Vector2f(50, 0);
                quad[2].texCoords = Vector2f(50, 56);
                quad[3].texCoords = Vector2f(0, 56);

                quad2[0].position = Vector2f(0, 0);
                quad2[1].position = Vector2f(50, 0);
                quad2[2].position = Vector2f(50, 56);
                quad2[3].position = Vector2f(0, 56);

                quad2[0].texCoords = Vector2f(0, 0);
                quad2[1].texCoords = Vector2f(50, 0);
                quad2[2].texCoords = Vector2f(50, 56);
                quad2[3].texCoords = Vector2f(0, 56);
}
 
Bien que je sais que c'est inutile de superposer deux quads, je simplifie au max mon problème en faisant cela. Je pense que si j'en empile 2 le résultat devrait être le même qu'un seul quad affiché mais voilà ce que ça me donne [voir fichier joint] . C'est comme si on n'avait pas défini le point x0y1...

Voilà merci encore
« Modifié: Septembre 01, 2014, 08:48:00 pm par AnselmeSfml »