Forum de la communauté SFML

Aide => Général => Discussion démarrée par: Clyx le Octobre 06, 2016, 08:00:27 pm

Titre: Grille Hexagonale avec vertex array
Posté par: Clyx le Octobre 06, 2016, 08:00:27 pm
Bonsoir,

je suis en galère depuis bientôt 1 semaine en essayant de faire un algo me permettant de rendre une map (tilemap) hexagonale.

J'ai du mal au niveau des maths qui se cache derrière la science des hexagones c'est pourquoi je fait appel à vous.

J'aimerais savoir comment implémenter ce système à travers SFML de manière optimisée.
Pour le moment j'ai une classe héritant de Drawable et c'est à peu près tout.. enfin j'ai une méthode pour tenter d'initialiser mes hexagones mais je n'y parvient pas.

Dans la forme j'aimerais être capable de rendre une map de longueur W et de hauteur H, avec des carrés je n'ai aucun problème mais avec des hexagones je suis complètement paumé.

Voici ou j'en suis :

(click to show/hide)

PS: Mes hexagons sont orienté "Pointy" ou dit verticaux.

Toute aide est la bienvenue.


Merci d'avance.
Titre: Re : Grille Hexagonale avec vertex array
Posté par: brunnerant le Novembre 10, 2016, 12:01:54 pm
Premièrement, désolé de la réponse tardive, mais comme on dit, mieux vaut tard que jamais ! :P

Je pense que le gros problème avec les hexagones, c'est de définir un système de coordonnées qui tient la route. Ou mettre l'origine ? Que représente les coordonnées X et Y d'un hexagone ? Tu devrais te poser ces questions avant de commencer à implémenter ton projet.

J'ai trouvé une image qui pourrait t'aider :

(http://www.iceplug.us/hexcoord.jpg)

Tu dois donc d'abord trouver la position de l'hexagone à l'écran en fonction de la position de l'hexagone dans le système de coordonnée. Par exemple, si je te donne l'hexagone 3-5 sur l'image, tu dois être capable de retrouver sa position à l'écran en faisant un peut de maths.
Voici une manière de faire:
Il faut que tu calcule les deux vecteur de ta base (i et j). En gros, il faut que tu calcule le vecteur pour te déplacer d'une unité selon l'axe x, et l'axe y. Ensuite tu n'as plus qu'à calculer la position de l'hexagone à l'aide de ces deux vecteurs.
Donc dans le cas de l'hexagone 3-5, par exemple, tu te déplaces de 3*le vecteur i, et de 5* le vecteur j (je t'ai fait un schéma sur Paint  ;D), et cela te donne la position de l'hexagone depuis l'origine (l'hexagone 0-0).
Pour ensuite calculer la position des sommets d'un hexagone, tu les calcules à partir de la position du centre de cet hexagone, tu devrais résussir

J'espère avoir répondu à ta question, et n'hésite pas à demander si ce n'était pas clair !