Sto cercando di scrivere un piccolo motore voxel perché è divertente, ma faccio fatica a trovare il modo migliore per memorizzare i voxel reali. Sono consapevole che avrò bisogno di pezzi di qualche tipo, quindi non ho bisogno di avere l'intero mondo in memoria, e sono consapevole di aver bisogno di renderli con prestazioni ragionevoli.
Ho letto di ocre e da quello che ho capito inizia con 1 cubo, e in quel cubo possono esserci altri 8 cubi, e in tutti quegli 8 cubi possono esserci altri 8 cubi ecc. Ma non penso che questo si adatti al mio motore voxel perché i miei cubi / oggetti voxel avranno tutti la stessa identica dimensione.
Quindi un'altra opzione è quella di creare un array di dimensioni 16 * 16 * 16 e avere un pezzo, e lo riempi di elementi. E le parti in cui non ci sono articoli avranno 0 come valore (0 = aria). Ma temo che questo sprecherà molta memoria e non sarà molto veloce.
Quindi un'altra opzione è un vettore per ogni blocco e riempilo con cubetti. E il cubo mantiene la sua posizione nel blocco. Ciò consente di risparmiare memoria (senza blocchi d'aria), ma rende molto più lento la ricerca di un cubo in una posizione specifica.
Quindi non riesco davvero a trovare una buona soluzione e spero che qualcuno mi possa aiutare in questo. Quindi cosa useresti e perché?
Ma un altro problema è il rendering. Basta leggere ogni blocco e inviarlo alla GPU usando OpenGL è facile, ma molto lento. Generare una mesh per blocco sarebbe meglio, ma ciò significa che ogni volta che rompo un blocco, devo ricostruire l'intero blocco che potrebbe richiedere un po 'di tempo causando un piccolo ma evidente singhiozzo, che ovviamente non voglio neanche. Quindi sarebbe più difficile. Quindi come renderei i cubi? Basta creare tutti i cubi in un buffer di vertici per blocco e renderlo e magari provare a inserirlo in un altro thread o c'è un altro modo?
Grazie!