86

Разрабатываю 3D-движок для Dendy

Вывел в скелетном виде 3D-модель из блендера

Вывел в скелетном виде 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/

Всем спасибо за внимание.

Больше постов читайте по тегу «Программирование». А если хотите изучить новую профессию, посмотрите актуальные курсы от проверенных школ с реальными отзывами на сайте Пикабу Курсы.

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества