Ahoy!
Je recherche des informations sur les cartes de tuiles, ou plutôt sur le nom d'un type spécifique de carte de tuiles.
Je suis intéressé par le type d'implémentation utilisé dans le magnat des montagnes russes, ou la série de jeux de magnat du transport et j'ai étudié le terrain du champ vectoriel et le terrain de la carte de la hauteur, mais je ne suis pas sûr qu'ils conviennent à ce que je cherche développer.
Il a été difficile de trouver des informations décentes car la plupart des gens s'y réfèrent comme une carte de tuiles isométriques, mais je cherche à créer quelque chose en 3D avec une perspective orthographique fixe. Je comprends que le stockage sous-jacent de la carte de tuiles n'a rien à voir avec la façon dont elle est rendue, mais je ne cherche pas à créer une carte de tuiles 2D comme les jeux pokemon / zelda old school, plus dans la lignée de diablo avec la capacité d'inclure falaises en surplomb et terrain en pente.
J'essaie simplement de trouver les bons termes pour rechercher sur Google et stackoverflow des ressources pour m'aider à décider quel chemin suivre.
Jusqu'à présent, j'ai réussi à étoffer une carte de tuiles de base sans utiliser le composant hauteur / y stocké dans un VBO et rendu sous forme de filaire. Cela semble correct jusqu'à présent, mais j'envisage de rencontrer des problèmes lorsque j'essaie de manipuler un seul sommet pour créer des falaises et des pentes sans affecter une tuile voisine.
Existe-t-il un type spécifique de mise en œuvre que je devrais étudier? Je pensais l'avoir craqué quand j'ai trouvé une bonne quantité d'informations sur le terrain de champ vectoriel, mais je ne suis pas sûr que cela donnerait les résultats corrects non plus.
Si quelqu'un peut m'éclairer à ce sujet, l'aide serait grandement appréciée :)
Mettre à jour
J'ai inclus une image pour plus de précisions sur ce que j'aimerais réaliser:
Image empruntée à Comment créer des tuiles isométriques inclinées (en hauteur)
Cette image montre le type de terrain que je voudrais générer, mais n'inclut pas les "falaises" ou les types de terrain en surplomb que je souhaite modéliser. Cela soulève cependant quelques autres questions auxquelles je n'avais pas pensé, à savoir;
- Comment les «couches» telles que l'eau (en haut à gauche de l'image) seraient-elles gérées pour inclure le sol visible sous l'eau?
- Comment les «bords» de la carte seraient-ils pris en compte afin que la terre / boue soit rendue pour représenter le monde comme une entité non plate?
- Le stockage sous-jacent de ce type de terrain pourrait-il être utilisé pour modéliser la physique, comme une balle roulant sur une colline ou les vitesses de déplacement d'un joueur traversant une pente?
J'ai eu une idée en ce que chaque tuile du terrain pourrait être modélisée avec 8 sommets où les 4 sommets principaux couvrent la tuile réelle elle-même et les 4 sommets restants sont utilisés pour modéliser les côtés / murs de chaque tuile. Les deux problèmes que je vois avec cette implémentation sont que a) la carte du monde est essentiellement doublée de taille et b) étant donné que toutes les tuiles n'incluront pas de "murs", certaines tuiles se retrouveront avec des sommets redondants qui ne sont pas utilisés.
Je voudrais créer un éditeur de terrain qui permet à chaque tuile d'être déformée ainsi que la possibilité de changer le terrain pendant le jeu. Cela pose en soi des questions supplémentaires telles que; Un VBO peut-il être utilisé pour stocker et rendre le terrain tout en étant modifié à la volée et est-il également possible de modifier les sommets sans affecter les tuiles voisines?
J'ai l'impression que je complique trop les choses ou que je tombe dans la paralysie de l'analyse en ce que je néglige d'écrire du code pour résoudre le problème sans avoir une idée claire de la façon dont j'obtiendrais ce que je veux.
Encore une fois, je suis vraiment à la recherche d'un coup de pouce dans la bonne direction avec cela. Existe-t-il un type spécifique d'implémentation de tilemap / terrain qui permettrait à une carte 3D d'être déformée à la fois par un éditeur de carte et pendant le gameplay ou dois-je rouler le mien, pour ainsi dire? Je n'essaie pas de réinventer la roue ici, mais j'ai du mal à trouver des ressources étant donné que je ne sais pas quoi chercher.
Si quelqu'un peut fournir des informations, des ressources ou des extraits de code, cela serait grandement apprécié car je suis impatient de me salir les mains et de commencer à produire autre chose que le filaire plat que j'ai actuellement.
Merci d'avoir lu!
Ceci: http://30.media.tumblr.com/tumblr_m06qv6OREt1r2qjpao1_500.png est un exemple de carte que j'ai faite il y a quelque temps.
J'avais un XML représentant la carte et différents types de tuiles. Chaque type aurait quelques attributs:
ALL
(si elle devait fusionner avec une tuile autour d'elle),EQUAL
(fusionner uniquement avec des tuiles du même type),NONE
(ne jamais fusionner).Je lisais ensuite toutes les tuiles et les créais dans la scène. Tout d'abord en tenant compte de la position. Chaque tuile devait savoir que c'était son voisin, j'ai donc dû parcourir la carte deux fois, une fois pour tout créer, et encore une fois pour déplacer chaque sommet à la bonne position.
Bien que mes modèles soient des hexagones, le concept est le même, vous auriez besoin d'un cube pour représenter votre tuile, vous déplaceriez ensuite les sommets de base au niveau le plus bas et `` lisseriez '' le haut du cube avec les cubes autour. Vous vérifieriez également si deux côtés des cubes ont été fusionnés afin que vous puissiez simplement supprimer ce côté du cube (s'ils ne sont pas fusionnés, c'est probablement une falaise ou quelque chose).
À propos de la physique, cela dépend de votre objectif. Si vous faites quelque chose comme un magnat des montagnes russes, vous n'en avez pas vraiment besoin. Vous pouvez simplement vérifier la hauteur du joueur entre chaque tuile et décider de la vitesse de marche. Vous pouvez faire de même pour un objet qui se déplace tout seul (comme la balle), vous pouvez vérifier les tuiles autour (ou l'angle actuel des tuiles) et décider d'une direction / vitesse. Si vous avez besoin d'une physique réaliste (comme la gravité, la friction, etc.), vous devrez utiliser un moteur physique et vous pourriez utiliser la représentation 3D du cube dans le moteur.
Les couches sont également possibles, mais vous auriez besoin de quelque chose comme minecraft (avec lissage sur les cubes dans la couche la plus haute). Si vous n'avez besoin que de couches pour l'eau, vous pouvez avoir une "source d'eau" sur une tuile et demander à votre code de remplir tous les espaces autour d'elle qui sont à la même hauteur ou plus bas (une solution récursive conviendrait bien ici).
Un éditeur de terrain serait également simple, si votre code est suffisamment flexible, vous pouvez appliquer les transformations à une seule tuile (celle que vous modifiez), ou à une liste de tuiles (si vous utilisez un 'pinceau' pour sélectionnez-les et déplacez-les). Le même code peut être utilisé pour modifier le terrain du jeu. Et oui, vous pouvez changer les sommets sur le VBO, il est également possible de changer les sommets sans affecter les autres (cela dépend aussi de votre codage comme ça).
la source