Ich erstelle eine zufällig generierte Umgebung für ein Spiel, das ich entwickle. Ich benutze OpenGL
und codiere in Java
.
Ich versuche, zufällig Bäume in meiner Welt zu platzieren (um einen Wald zu erstellen), aber ich möchte nicht, dass sich die Modelle überlappen (was passiert, wenn zwei Bäume zu nahe beieinander stehen). Hier ist ein Bild von dem, wovon ich spreche:
Ich kann bei Bedarf mehr Code bereitstellen, aber hier sind die wesentlichen Ausschnitte. Ich lagere meine Objekte in einem ArrayList
mit List<Entity> entities = new ArrayList<Entity>();
. Ich füge dieser Liste dann Folgendes hinzu:
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);
}
Dabei Entity
folgt jeder der folgenden Syntax:
new Entity(modelName, positionVector(x, y, z), rotX, rotY, rotZ, scaleX, scaleY, scaleZ);
rotX
ist die Drehung entlang der x-Achse und scaleX
ist die Skala in x-Richtung usw.
Sie können sehen , dass ich diese Bäume zufällig bin Platzierung random.nextFloat()
für die x
und z
Positionen, und begrenzen den Bereich , so dass die Bäume in der gewünschten Position angezeigt werden. Ich möchte diese Positionen jedoch irgendwie steuern, sodass beim Versuch, einen Baum zu nahe an einem zuvor platzierten Baum zu platzieren, eine neue zufällige Position neu berechnet wird. Ich dachte, dass jeder Baum Entity
ein anderes Feld haben könnte, wie zum Beispiel treeTrunkGirth
, und wenn ein Baum in der Entfernung zwischen dem Standort eines anderen Baums und treeTrunkGirth
seinem Platz platziert wird, berechnet er eine neue Position neu. Gibt es eine Möglichkeit, dies zu erreichen?
Gerne füge ich bei Bedarf weitere Codefragmente und Details hinzu.
treeTrunkGirth
anstelle einer Konstante auch den Mindestabstand zum Platzieren eines Baums, wenn dieser variieren muss.