J'essaie d'écrire un petit moteur de voxels parce que c'est amusant, mais j'ai du mal à trouver la meilleure façon de stocker les voxels réels. Je suis conscient que j'aurai besoin de morceaux en quelque sorte, donc je n'ai pas besoin d'avoir le monde entier en mémoire, et je suis conscient que j'ai besoin de les rendre avec des performances raisonnables.
J'ai lu des octrees et d'après ce que je comprends, cela commence par 1 cube, et dans ce cube peut être 8 cubes de plus, et dans tous ces 8 cubes peut être encore 8 cubes etc. Mais je ne pense pas que cela correspond à mon moteur de voxel parce que mes cubes / articles de voxel auront tous exactement la même taille.
Donc, une autre option consiste à créer simplement un tableau de taille 16 * 16 * 16 et à avoir un seul bloc, et vous le remplissez d'éléments. Et les pièces où il n'y a pas d'articles auront 0 comme valeur (0 = air). Mais je crains que cela ne gaspille beaucoup de mémoire et ne soit pas très rapide.
Ensuite, une autre option est un vecteur pour chaque morceau et remplissez-le de cubes. Et le cube tient sa position dans le morceau. Cela économise de la mémoire (pas de blocs d'air), mais rend la recherche d'un cube à un emplacement spécifique beaucoup plus lente.
Je ne peux donc pas vraiment trouver de bonne solution et j'espère que quelqu'un pourra m'aider. Alors, que voudriez-vous utiliser et pourquoi?
Mais un autre problème est le rendu. Il suffit de lire chaque morceau et de l'envoyer au GPU à l'aide d'OpenGL, mais c'est très lent. Générer un maillage par morceau serait mieux, mais cela signifie que chaque fois que je casse un bloc, je dois reconstruire le morceau entier, ce qui pourrait prendre un peu de temps, provoquant un hoquet mineur mais perceptible, ce que je ne veux évidemment pas non plus. Ce serait donc plus difficile. Alors, comment pourrais-je rendre les cubes? Il suffit de créer tous les cubes dans un tampon de vertex par bloc et de le rendre et peut-être d'essayer de le mettre dans un autre thread, ou y a-t-il une autre façon?
Merci!