Итак, я работал над процедурным генерированием, и мне удалось создать круговую монохромную карту градиента, которую я использую для генерации других карт.
def create_circular_gradient(self, world):
center_x, center_y = self.mapSize[1] // 2, self.mapSize[0] // 2
circle_grad = np.zeros_like(world)
for y in range(world.shape[0]):
for x in range(world.shape[1]):
distx = abs(x - center_x)
disty = abs(y - center_y)
dist = math.sqrt(distx * distx + disty * disty)
circle_grad[y][x] = dist
# get it between -1 and 1
max_grad = np.max(circle_grad)
circle_grad = circle_grad / max_grad
circle_grad -= 0.5
circle_grad *= 2.0
circle_grad = -circle_grad
# shrink gradient
for y in range(world.shape[0]):
for x in range(world.shape[1]):
if circle_grad[y][x] > 0:
circle_grad[y][x] *= 20
# get it between 0 and 1
max_grad = np.max(circle_grad)
circle_grad = circle_grad / max_grad
grad_world = self.apply_gradient_noise(world, circle_grad)
return grad_world
Теперь мой вопрос, как именно мне нужно изменить это, чтобы создать случайный градиент завихрения? и даже может быть коробка или разнообразные линейные градиенты?
Обратите внимание, что world
- это случайно сгенерированный двумерный массив (и может иметь любую форму, например, 100x100 или даже 100x50, но, конечно, я использую его намного больше), и к градиенту окружности я добавляю шум перлина, чтобы рандомизировать поколение. Код, который рандомизирует его, будет работать для любой карты, но я не уверен, с чего начать создавать различные формы градиента.
Редактировать
Игнорировать магические числа, это был единственный способ, которым я нашел, как создать круговой монохромный градиент