Вывел в скелетном виде 3D-модель из блендера
Всем привет. Я уже года полтора зимаюсь разработкой игр для консоли денди/NES/Famicom. Все мои игры имеют классическую спрайтовую 2D-графику, но периодически меня посещали мысли реализовать 2.5D и честную 3D графику для денди.
Это задача не совсем тривиальная, но я решил побороться за возможность работать с полигональными моделями на денди. И за несколько недель набросал простой 3Д-движок.
Основной сложностью было то, что денди не дает возможность редактировать отдельные пиксели, можно редактировать только целые тайлы (тайлы - это плитки 8х8 пикселей). Поэтому, чтоб нарисовать пиксель в случайном месте экрана, нужно подготовить тайл, который содержит пиксель в нужном месте. А потом этот сгенерированный тайл нужно вывести в правильное место экрана. Довольно сложный механизм.
На данном этапе я почти закончил 2D-движок (осталось доделать вывод залитых треугольников любого вида, задача не совсем очевидная, если стараться все оптимзировать и использовать 8-битные переменные).
Кроме 2д-графики реализовал алгоритм определения угла наклона полигона относительно луча от камеры. Определение угла нужно для расчета теней и видимости полигона (на превью невидимые полигоны не выводятся).
В остальном вывод 3д-модели - это просто рисование треугольников на плоском холсте. Ничего сверхъестественного.
Для вывода более зрелищных моделей мне осталось реализовать вывод цветных залитых треугольников и поэкспериментировать с расчетом освещенности полигонов для вывода теней.
Сегодня вот добавил возможность вывода разноцветных пикселей одновременно (можно использовать 4 цвета одновременно):
Разноцветный контурный треугольник на Денди
С цветной картинкой была основная сложность с реализацией буфера видеопамяти. Пришлось мудрить с распределением памяти, так как доступной оперативки у меня был всего 1 килобайт (даже чуть меньше на самом деле), но в итоге все получилось.
На выгрузку буфера в видеопамять требуется примерно 4-5 кадров (при 60 фпс). А для вывода 10 полигонов требуется примерно 5-10 кадров. Значит должно получиться сделать какую-то динамичную 3д-сцену или простенькую аркаду (пишите ваши идеи простой 3д-игры).
Из оставшихся задач для 3Д нужно реализовать матрицу трансформации или хотя бы просто механизм вращения. Если будет механизм вращения, уже можно будет заняться 3Д-демкой полноценной.
И вот еще несколько экспериментов с 3д-моделями:
Свежие версии моих игр выкладываю на странице на итч.ио - https://swamptech.itch.io/
Информацию по проектам и обсуждение изменений с подписчиками веду в ТГ - https://t.me/Swamp_Tech
Через 2-3 недели на хабре выпущу большую статью техническую про разработку 3д-движка (на пикабу такие статьи не заходят, к сожалению) - https://habr.com/ru/users/Swamp_Dok/
Всем спасибо за внимание.