Sto creando un ambiente generato casualmente per un gioco che sto sviluppando. Sto usando OpenGL
e codificando Java
.
Sto cercando di posizionare casualmente alberi nel mio mondo (per creare una foresta), ma non voglio che i modelli si sovrappongano (cosa che accade quando due alberi sono posizionati troppo vicini l'uno all'altro). Ecco una foto di ciò di cui sto parlando:
Posso fornire più codice se necessario, ma ecco i frammenti essenziali. Sto conservando i miei oggetti in un ArrayList
con List<Entity> entities = new ArrayList<Entity>();
. Aggiungo quindi a tale elenco utilizzando:
Random random = new Random();
for (int i = 0; i < 500; i++) {
entities.add(new Entity(tree, new Vector3f(random.nextFloat() * 800 - 400,
0, random.nextFloat() * -600), 0, random.nextFloat() * 360, 0, 3, 3, 3);
}
dove ciascuno Entity
segue la seguente sintassi:
new Entity(modelName, positionVector(x, y, z), rotX, rotY, rotZ, scaleX, scaleY, scaleZ);
rotX
è la rotazione lungo l'asse x, ed scaleX
è la scala nella direzione x, ecc.
Si può vedere che sto mettendo questi alberi in modo casuale con random.nextFloat()
le x
e z
posizioni, e che delimita il campo in modo appariranno gli alberi nella posizione desiderata. Tuttavia, vorrei in qualche modo controllare queste posizioni, in modo che se provi a posizionare un albero troppo vicino a un albero precedentemente posizionato, ricalcolerà una nuova posizione casuale. Stavo pensando che ogni albero Entity
potrebbe avere un altro campo, come treeTrunkGirth
, e se un albero viene posizionato in lontananza tra la posizione di un altro albero ed è treeTrunkGirth
, allora ricalcolerà una nuova posizione. C'è un modo per raggiungere questo obiettivo?
Sono felice di aggiungere ulteriori frammenti di codice e dettagli se necessario.
treeTrunkGirth
invece di una costante per determinare la distanza minima per posizionare un albero se è necessario variare.