Skip to content
/ wfc Public

Симуляция алгоритма Wave Function Collapse (WFC), который используется для создания уникальных случайно сгенерированных паттернов, написанный на C++ с визуализацией через SFML.

Notifications You must be signed in to change notification settings

kudrmax/wfc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

54 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Wave Function Collapse Simulation

🌊 О проекте

Это проект на C++, использующий библиотеку SFML для создания симуляции алгоритма Wave Function Collapse (WFC), который применяется для создания уникальных случайно сгенерированных паттернов.

Как работает алгоритм:

  1. Сначала задаются правила, по которым текстуры могут соединяться.
  2. Изначально в каждой ячейке могут быть все возможные варианты текстур. Затем мы "коллапсируем" одну из ячеек, то есть устанавливаем в ней конкретную текстуру. В таком случае в соседних ячейках количество вариантов возможных текстур уменьшается — начинает распространяться "волна коллапса", которая убирает неподходящие текстуры.
  3. Продолжаем коллапсировать случайные ячейки и распостронять "волны коллапса" до тех пор, пока всё изображение не будет сгенерированно.

Технологии: С++, 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

About

Симуляция алгоритма Wave Function Collapse (WFC), который используется для создания уникальных случайно сгенерированных паттернов, написанный на C++ с визуализацией через SFML.

Resources

Stars

Watchers

Forks