Sto progettando un gioco parzialmente composto da esplorazione dei pianeti. Voglio usare la generazione pseudo-casuale per loro, rigenerando da un seme definito quando devo caricarli piuttosto che archiviare ogni dettaglio, il che sarebbe troppo pesante. Quindi memorizzerò in un file il seme casuale e le eventuali modifiche apportate dal giocatore.
Il giocatore deve essere in grado di vedere il pianeta dall'orbita (con un livello molto basso di dettagli, quindi scendere a terra, aumentando lentamente il livello dei dettagli della regione in cui sta atterrando e scaricando quelli sugli altri lati del pianeta, che vanno al di fuori del campo visivo del giocatore.
Se dovessi farlo su un piano, lo farei facilmente con un sistema di blocchi quadrati. Ma il problema qui è che i pianeti sono - quasi - sfere.
Quindi quale sarebbe il modo migliore per caricare i dettagli del terreno (rilievo e oggetti messi a terra) attorno a un punto preciso?
Ho già pensato a due soluzioni, ma entrambe hanno un punto debole:
1. Tagliare la sfera in pezzi quadrati.
Una volta che il giocatore è abbastanza vicino al terreno, devo solo migliorare i dettagli dei quadrati più vicini dalla sua posizione.
Se non è abbastanza, posso ancora tagliare ogni quadrato nei sotto-quadrati per caricarlo quando i giocatori sono su o molto vicino al terreno.
Ma come puoi vedere nella foto, c'è un problema se il giocatore cerca di atterrare su un palo: i quadrati diventano rettangoli molto sottili, o addirittura triangoli per l'ultima linea, e in aggiunta al fatto che sarebbero molti da caricare, la generazione sembrerebbe distorta.
2. A partire da un icosaedro.
Qui, potrei solo aumentare la tassellatura triangolare intorno alla posizione del giocatore quando si avvicina.
Ma non so come individuare i triangoli vicini alla posizione del giocatore. Ho sentito che le coordinate cartesiane potrebbero essere utili in quel caso, ma non so come usarle.
Sto usando C ++ / OpenGL per questo, quindi la cosa principale da generare e caricare qui sono i vertici che rappresentano il rilievo superficiale e il colore / la trama.