Tworzę losowo generowane środowisko dla gry, którą tworzę. Używam OpenGL
i koduję Java
.
Staram się losowo umieszczać drzewa w moim świecie (aby utworzyć las), ale nie chcę, aby modele nakładały się (co dzieje się, gdy dwa drzewa są umieszczone zbyt blisko siebie). Oto zdjęcie tego, o czym mówię:
W razie potrzeby mogę podać więcej kodu, ale oto niezbędne fragmenty. I 'm przechowywanie moje obiekty w ArrayList
z List<Entity> entities = new ArrayList<Entity>();
. Następnie dodaję do tej listy, używając:
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);
}
gdzie każdy Entity
ma następującą składnię:
new Entity(modelName, positionVector(x, y, z), rotX, rotY, rotZ, scaleX, scaleY, scaleZ);
rotX
oznacza obrót wzdłuż osi x, i scaleX
jest skalą w kierunku x itp.
Widać, że jestem umieszczenie tych drzew losowo z random.nextFloat()
za x
i z
stanowisk, a ograniczająca zakres więc drzewa pojawią się w odpowiednim miejscu. Chciałbym jednak jakoś kontrolować te pozycje, aby jeśli spróbuje umieścić drzewo zbyt blisko poprzednio umieszczonego drzewa, przeliczy nową pozycję losową. Myślałem, że każde drzewo Entity
może mieć inne pole, na przykład treeTrunkGirth
, a jeśli drzewo zostanie umieszczone w odległości między lokalizacją innego drzewa, a ono treeTrunkGirth
, wówczas ponownie obliczy nową pozycję. Czy istnieje sposób na osiągnięcie tego?
W razie potrzeby chętnie dodam więcej fragmentów kodu i szczegółów.
treeTrunkGirth
Zamiast stałej należy również użyć minimalnej odległości do umieszczenia drzewa, jeśli muszą się różnić.