Estoy creando un entorno generado aleatoriamente para un juego que estoy desarrollando. Estoy usando OpenGL
y codificando Java
.
Estoy tratando de colocar árboles al azar en mi mundo (para crear un bosque), pero no quiero que los modelos se superpongan (lo que sucede cuando dos árboles se colocan demasiado cerca el uno del otro). Aquí hay una foto de lo que estoy hablando:
Puedo proporcionar más código si es necesario, pero aquí están los fragmentos esenciales. Estoy almacenando mis objetos en un ArrayList
con List<Entity> entities = new ArrayList<Entity>();
. Luego estoy agregando a esa lista usando:
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);
}
donde cada uno Entity
sigue la siguiente sintaxis:
new Entity(modelName, positionVector(x, y, z), rotX, rotY, rotZ, scaleX, scaleY, scaleZ);
rotX
es la rotación a lo largo del eje xy scaleX
es la escala en la dirección x, etc.
Se puede ver que estoy colocando estos árboles al azar con random.nextFloat()
los x
y las z
posiciones, y que limita la gama de modo que los árboles van a aparecer en la ubicación deseada. Sin embargo, me gustaría controlar de alguna manera estas posiciones, de modo que si intenta colocar un árbol demasiado cerca de un árbol colocado previamente, volverá a calcular una nueva posición aleatoria. Estaba pensando que cada árbol Entity
podría tener otro campo, como treeTrunkGirth
, y si un árbol se coloca en la distancia entre la ubicación de otro árbol y es treeTrunkGirth
, entonces volverá a calcular una nueva posición. ¿Hay alguna manera de lograr esto?
Me complace agregar más fragmentos de código y detalles según sea necesario.
treeTrunkGirth
lugar de una constante para determinar la distancia mínima para colocar un árbol si necesita variar.