Je conçois un jeu partiellement composé d'exploration de planètes. Je veux utiliser une génération pseudo-aléatoire pour eux, régénérer à partir d'une graine définie lorsque je dois les charger plutôt que de stocker chaque détail, ce qui serait trop lourd. Je vais donc simplement stocker dans un fichier la graine aléatoire et les modifications effectuées par le joueur le cas échéant.
Le joueur doit être capable de voir la planète depuis l'orbite (avec un niveau de détails très bas, puis descendre vers le sol, augmenter lentement le niveau de détails de la région où il atterrit et décharger celles des autres côtés de la planète, qui sortent du champ de vision du joueur.
Si je devais le faire sur un sol plan, je le ferais facilement avec un système de morceaux carrés. Mais le problème ici est que les planètes sont - presque - des sphères.
Alors, quelle serait la meilleure façon de charger les détails du sol (relief et objets mis à la terre) autour d'un point précis?
J'ai déjà réfléchi à deux solutions, mais les deux ont un point faible:
1. Couper la sphère en morceaux carrés.
Une fois que le joueur est suffisamment près du sol, je n'ai qu'à améliorer les détails des cases les plus proches de sa position.
Si cela ne suffit pas, je peux toujours couper chaque carré en sous-carrés à charger lorsque les joueurs sont sur ou très près du sol.
Mais comme vous pouvez le voir sur l'image, il y a un problème si le joueur essaie d'atterrir sur un poteau: les carrés deviennent des rectangles très fins, voire des triangles pour la dernière ligne, et en plus du fait qu'ils seraient nombreux à charger, la génération semblerait déformée.
2. À partir d'un icosaèdre.
Ici, je pourrais simplement augmenter la tessellation du triangle autour de la position du joueur quand il / elle se rapproche.
Mais je ne sais pas comment localiser les triangles près de la position du joueur. J'ai entendu dire que les coordonnées cartésiennes pouvaient être utiles dans ce cas, mais je ne sais pas comment les utiliser.
J'utilise C ++ / OpenGL pour cela, donc la principale chose à générer et à charger ici sont les sommets représentant le relief de la surface et la couleur / texture.