Question

Quel serait le meilleur moyen d'implémenter, de stocker et de restituer des mondes sphériques, tels que ceux en spore ou à l'infini, mais sans les étapes intermédiaires entre spores et les mondes multiples dans un univers à l'infini. Ne faites aucune hypothèse sur la manière dont la planète elle-même est générée ou sur sa taille / échelle.

Était-ce utile?

La solution

Pour le rendu, vous devez utiliser une sorte d'algorithme de niveau de détail afin de pouvoir vous déplacer de façon transparente de près à la surface de la planète. Il existe de nombreux algorithmes de LOD dynamiques ( voir ici ). Un algorithme plus ancien, appelé ROAM, peut être adapté pour gérer des objets sphériques ou des planètes ( ROAM sphérique ). Les cartes clip géométriques sont un algorithme plus récent, plus populaire, qui peut être adapté aux surfaces sphériques . .

En ce qui concerne le stockage des données, vous souhaiterez peut-être examiner la génération de procédures (en fonction de vos besoins) pour la texturation, les cartes de hauteur, etc. Ceci est similaire à la façon dont Infinity et Spore agissent. Vous pouvez en savoir plus sur la texturation procédurale ici . . Les altimètres procéduraux sont plus simples, en fonction de la complexité / du réalisme de votre terrain. Au niveau le plus simple, vous pouvez simplement déplacer la hauteur de votre sommet par une fonction de bruit perlin.

Autres conseils

Si vous souhaitez stocker des données relatives à la surface, consultez HEALpix . . C'est un logiciel développé par la communauté astronomique spécialement pour cartographier le ciel (une autre surface sphérique).

HEALpix crée un maillage qui décrit la position et la taille des faces de la surface et attribue à chacun un identifiant. Vous pouvez ensuite utiliser cet identifiant comme clé ou index pour accéder à autant de détails que vous le souhaitez sur ce niveau particulier.

HEASpix fournit des méthodes pour rechercher les surfaces adjacentes et peut indiquer les positions du centre et du sommet pour chaque point du maillage.

Il s’agit d’un maillage hiérarchique qui vous permet de subdiviser chaque face autant de fois que vous le souhaitez. Vous pouvez donc théoriquement avoir des parties du maillage à basse résolution et d’autres à des niveaux de détail plus élevés, si vous le souhaitez. Il a la propriété d'être divisible à l'infini (jusqu'à votre limite de mémoire) et chaque pixel de la grille à une résolution donnée a la même surface que tous les autres à ce niveau de résolution.

Le paquet de distribution fournit beaucoup de choses dont vous n’auriez probablement pas besoin mais les bibliothèques principales devraient vous être utiles.

Ce n’est probablement pas ce que vous recherchez ... Mais bon sang. C'est une bonne histoire.

Il y a bien longtemps, à l'époque où les dinosaures parcouraient encore la Terre et que la mémoire était toujours mesurée en kilo-octets, j'ai joué avec un logiciel pour générer des planètes de manière fractale.

L’idée était de créer un rectangle 2NxN représentant la planète. Coupez la planète en une demi-heure en décalant légèrement les deux moitiés à chaque fois. (Onde sinusoïdale pour la coupure avec décalage de phase et amplitude aléatoires. Une autre onde sinusoïdale aléatoire pour le décalage.) Ensuite, inondez les zones les plus basses avec de l'eau et codez les couleurs en fonction de l'altitude.

Placez ensuite une sphère de diamètre N au-dessus et projetez-la en enveloppant une région NxN de la carte autour de la moitié de la sphère. Déplacez la sphère sur la carte et vous aurez l’impression de la faire pivoter.

Je suggérerais d'utiliser une sorte de modèle de polygone en mémoire pour implémenter les mondes, utiliser un fichier pour les stocker et les restituer à l'aide d'une sorte de moteur 3D. Soit ça, soit juste un centre de pointeur et un rayon, avec une superposition pour décrire la géographie du monde.

Modifier: Merci pour un peu plus de détails. Selon le niveau de détail dont vous avez besoin, vous devrez utiliser une sorte de méthode pour diviser la texture en parties plus petites. Vous pouvez simplement générer la texture de 20 faces et construire un Icosahedron autour du point central. Consultez les projections cartographiques pour obtenir des informations sur la manière dont cela est géré dans la vie réelle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top