Я створюю навколишнє середовище для гри, яку я розвиваю. Я використовую OpenGL
і кодую в Java
.
Я намагаюся навмання розмістити дерева у своєму світі (щоб створити ліс), але не хочу, щоб моделі перетиналися (що відбувається, коли два дерева розміщені занадто близько один до одного). Ось малюнок того, про що я говорю:
Я можу надати більше коду, якщо необхідно, але ось основні фрагменти. Я зберігаю свої предмети в ArrayList
с List<Entity> entities = new ArrayList<Entity>();
. Потім я додаю до цього списку за допомогою:
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);
}
де кожен Entity
наступний синтаксис:
new Entity(modelName, positionVector(x, y, z), rotX, rotY, rotZ, scaleX, scaleY, scaleZ);
rotX
- це обертання вздовж осі x і scaleX
є шкалою в напрямку x і т.д.
Ви можете бачити, що я розміщую ці дерева випадковим чином random.nextFloat()
для x
та z
позицій, і обмежую діапазон, щоб дерева з’являлися в потрібному місці. Однак я хотів би якось контролювати ці позиції, так що якщо він спробує розмістити дерево занадто близько до раніше розміщеного дерева, він перерахує нову випадкову позицію. Я думав, що кожне дерево Entity
може мати інше поле, наприклад treeTrunkGirth
, і якщо дерево розміщене на відстані між місцем розташування іншого дерева і його treeTrunkGirth
, то воно перерахує нову позицію. Чи є спосіб досягти цього?
Я радий додати більше фрагментів коду та деталей за необхідності.
treeTrunkGirth
замість константи для визначення мінімальної відстані для розміщення дерева, якщо вони потребують змін.