Это проект на C++
, использующий библиотеку SFML
для создания симуляции алгоритма Wave Function Collapse (WFC),
который применяется для создания уникальных случайно сгенерированных паттернов.
Как работает алгоритм:
- Сначала задаются правила, по которым текстуры могут соединяться.
- Изначально в каждой ячейке могут быть все возможные варианты текстур. Затем мы "коллапсируем" одну из ячеек, то есть устанавливаем в ней конкретную текстуру. В таком случае в соседних ячейках количество вариантов возможных текстур уменьшается — начинает распространяться "волна коллапса", которая убирает неподходящие текстуры.
- Продолжаем коллапсировать случайные ячейки и распостронять "волны коллапса" до тех пор, пока всё изображение не будет сгенерированно.
Технологии: С++
, SFML
В каждой ячейке отображаются возможные текстуры.
Когда мы коллапсируем ячейку, то видно, как распостраняется "волна коллапса."
Можно запустить автоматическую генерацию, а можно поставить на паузу и коллапсировать ячейки вручную с помощью правой кнопки мыши.
Каждый раз генерируется уникальное случайно сгенерированное изображение. Доступны различные текстуры для генерации и есть возможность загружать собственные.
- Для запуска или паузы генерации нажмите
SPACE
. - Для сброса сгенерированного паттерна нажмите
R
. - Для коллапсирования конкретного фрагмента нажмите по нему правой кнопкой мыши.
Файл config.h
содержит параметры для настройки генерации изображения. Вы можете настроить размер окна, количество
фрагментов разбиения и выбрать изображения для генерации паттернов.
const int H = 800; // высота окна
const int BLOCK_COUNT_H = 12; // количество фрагментов разбиения по вертикали
const float DELTA_TIME = 0.005f; // минимальное время между итерациями (0 для наискорейшей генерации)
const TileType TILE_TYPE = TileType::GREEN_KNOTS; // изображения, которые будут использоваться для генерации
Макс Кудряшов - 👾 GitHub - 💬 Telegram