Спрайтовый рендерер 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 — Учитесь. Создавайте. Открывайте.