Je programme en C ++ comme passe-temps depuis environ 4 mois maintenant, et j'ai vraiment adoré créer des trucs en utilisant des voxels. J'ai écrit un "jeu" (plutôt un défi personnel, car je n'ai vraiment fait que le terrain, pas de gameplay) qui rendait un monde semblable à Minecraft, mais récemment, j'ai pensé à essayer d'écrire un jeu / défi / etc. qui utilise un algorithme comme Marching Cubes ou Dual Contouring et réduit la taille du voxel. Lorsque j'ai écrit mon projet de type Minecraft, j'ai stocké les données de chaque bloc dans un tableau multidimensionnel de courts métrages non signés (me donnant ainsi jusqu'à 65536 types de blocs différents). De plus, pour le rendu, je n'ai stocké qu'un point (en tant que GLubyte) et un autre GLubyte pour indiquer laquelle des 6 faces fait face au point représenté. J'ai ensuite rendu le visage à l'aide d'un ombrage géométrique.
Avec le nouveau projet auquel j'ai pensé, la chose que je ne peux pas comprendre est de savoir comment je peux éventuellement stocker suffisamment de données de voxels pour avoir des voxels d'environ ~ 5 cm ou 10 cm par rapport aux anciens voxels de 1 m que j'avais. Lorsque j'ai rendu une zone de blocs de 704x704x704, mon ancien projet utilisait environ 670 Mo de RAM. Si je réduisais la taille du voxel à 10 cm et conservais la même distance de rendu, cela représenterait environ 649 Go de données Voxel (en supposant 2 octets par voxel et une zone de 7040 ^ 3 voxels). Existe-t-il un moyen de stocker les données de voxel d'une manière plus efficace qui me permette toujours un large éventail de types de voxels différents?