Перейти к содержимому

Спрайтовый рендерер VGA на FPGA на Verilog | Как на самом деле работают спрайты

FPGA Discovery (Learning How to Work with FPGAs)

0:00 / 0:00

Спрайтовый рендерер VGA на FPGA на Verilog | Как на самом деле работают спрайты

313 просмотров · 2 недели назад
FPGA Discovery (Learning How to Work with FPGAs)
2,41 тыс. подписчиков
313 просмотров · 2 недели назад
Как на самом деле FPGA рисует и перемещает спрайт на VGA-дисплее? В этом видео мы разберем рендерер спрайтов — один из самых полезных строительных блоков для создания игр, анимации и другой VGA-графики на FPGA. Начиная с пиксельных координат, генерируемых контроллером VGA 640×480, мы проследим полный процесс рендеринга: определение того, находится ли текущий пиксель VGA внутри спрайта, преобразование экранных координат в локальные координаты спрайта, вычисление адреса ПЗУ спрайта, чтение данных пикселей RGB332, обработка прозрачности и выбор окончательного цвета, отправляемого на дисплей. Мы также рассмотрим, как можно накладывать несколько спрайтов друг на друга с использованием логики приоритета, и объясним важную идею, которая значительно упрощает понимание графики спрайтов на FPGA: Мы не перемещаем пиксели спрайта в памяти — мы перемещаем координаты X и Y спрайта. Затем рендерер оценивает спрайт в этой новой позиции по мере сканирования VGA-дисплеем каждого кадра. Мы также рассмотрим, почему позиции спрайтов следует обновлять на границе кадра, чтобы избежать разрывов и визуальных сбоев. Наконец, мы создадим и продемонстрируем работающую реализацию на Verilog на Digilent Basys 3, используя спрайт космического корабля размером 32×32 RGB332, хранящийся в ПЗУ. Демонстрация включает прозрачность, синхронизированное с кадром движение, отскок от края, регулируемую скорость, паузу и несколько режимов движения. Важным принципом проектирования является разделение между рендерингом и поведением. Наш многократно используемый sprite_renderer.v не определяет, куда движется космический корабль — он просто рендерит спрайт в заданных ему координатах X/Y. Отдельный модуль движения существует только для нашей демонстрации. В вашем собственном проекте эти координаты могут поступать из элементов управления игрока, игровой логики, ИИ врагов, физики, логики анимации или совершенно другого аппаратного модуля. Файлы проекта на GitHub: https://github.com/FPGADude/Digital-D... Рассматриваемые темы: Координаты пикселей VGA 640×480 Что на самом деле делает рендерер спрайтов Экранные координаты против локальных координат спрайтов Обнаружение ограничивающих рамок спрайтов 2D-координаты в адреса ПЗУ Хранение спрайтов RGB332 Прозрачность спрайтов Выбор и приоритет пикселей Несколько спрайтов Перемещение спрайтов без перемещения данных изображения Обновление позиций, синхронизированное с кадрами Избегание разрывов и визуальных сбоев Разделение рендеринга спрайтов от игровой/движущей логики Разработка многоразовых графических модулей FPGA Демонстрация работы Basys 3 на аппаратном обеспечении Аппаратное обеспечение: Digilent Basys 3 (Artix-7) FPGA) HDL: Verilog Дисплей: VGA 640×480 Спрайт: 32×32 RGB332 Если вы разрабатываете игры для FPGA или экспериментируете с VGA-графикой, понимание рендерера спрайтов даст вам основу, которую можно использовать для игроков, врагов, снарядов, коллекционных предметов, элементов пользовательского интерфейса, анимации и многого другого. FPGA Discovery — Учитесь. Создавайте. Открывайте.