Я создаю случайно сгенерированную среду для игры, которую разрабатываю. Я использую 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
вместо константы, чтобы определить минимальное расстояние для размещения дерева, если они должны варьироваться.