Sto creando un gioco XNA che richiede uno spazio enorme per i giocatori. Attualmente, la mappa di altezza del test che sto usando è 4096x4096 e viene salvata come BMP a 4 bit.
Quello che sto cercando di fare è prendere quell'enorme file heightmap e renderlo nel gioco. Il problema che sto incontrando è il fatto che è inefficiente caricare l'intero terreno in memoria contemporaneamente, poiché utilizzerà la maggior parte della memoria disponibile.
Un altro problema che ho riscontrato è che non riesco a rendere il terreno tutto in una primitiva a causa di un limite rigido impostato in XNA.
Detto questo, ho trovato una serie di soluzioni, tutte elencate di seguito:
- Rendering basato sulla posizione dell'utente corrente - fondamentalmente disegnando un quadrato intorno all'utente indipendentemente dal loro orientamento all'interno del mondo. Non è esattamente quello che volevo, perché stai ancora rendendo lo spazio che l'utente non vede.
- Rendering basato sull'orientamento e sulla posizione dell'utente - Ho trovato una formula per recuperare un triangolo che dovrebbe avere i pixel della mappa di altezza che dovrebbero essere rappresentati, ma questo si è rivelato molto difficile.
- Dividere il terreno in più blocchi e renderizzare quelli più vicini all'utente - Ancora non molto efficiente poiché stai ancora eseguendo il rendering di blocchi che le persone non vedranno. Ed è un lavoro intenso perché poi devo dividere la mia altezza in diversi pezzi e la scalabilità diventa un grosso problema.
Dopo aver provato quelle soluzioni, sono appena uscito dalle idee su cosa fare. Ho ricevuto alcune risposte in cui le persone mi stanno dicendo di fare questi algoritmi complessi, ma semplicemente non ho idea di come approcciarli.
Quindi, in sostanza, sto chiedendo un modo semplice e diretto per rendere terreni giganteschi in XNA con la massima efficienza.
Sono piuttosto nuovo nello sviluppo di giochi in generale, ma sono disposto a ricercare se sembra promettente.
Aggiornamento 1: dopo aver ricercato il metodo di geoclipmapping, ho iniziato a programmare con quello. Ho fatto tutta la matematica e il gioco funziona. Tuttavia, è estremamente inefficiente, il che probabilmente è una cattiva codifica da parte mia. Funziona a 2FPS e utilizza un intero nucleo della mia CPU. Proverò a migliorare il codice, ma penso che avrò bisogno di più aiuto, quindi ecco un esempio del codice per la classe del gestore del terreno. Riporterò più risultati in seguito, se mai riuscissi a renderlo più efficiente.