Альфа-смешивание спрайтов в Nintendo DS Homebrew
-
08-06-2019 - |
Вопрос
Я пытаюсь альфа-смешивать спрайты и фоны с devkitPro (включая libnds, libarm и т.д.).
Кто-нибудь знает, как это сделать?
Решение
В качестве общей ссылки я однажды написал небольшая запись в блоге по поводу этого вопроса.По сути, сначала вам нужно определить, какой слой альфа-смешивается с какими другими слоями.Афаик,
- исходный слой (слои) должен находиться поверх целевых слоев, чтобы отображалось некоторое смешивание.это означает, что приоритет исходных слоев должен быть численно ниже, чем приоритет целевых слоев.
- исходный слой - это то, что должно быть полупрозрачным, конечный (ые) - это то, что должно быть видно насквозь (и да, я нахожу это довольно запутанным).
Для спрайты, в частности, Затем у вас есть 3 способа добиться альфа-смешивания в зависимости от того, что вам нужно и сколько вы "готовы заплатить" за это.:
- Вы можете сделать так, чтобы все спрайты имели некоторое альфа-смешивание, включив
BLEND_SRC_SPRITE
вREG_BLDCNT[_SUB]
...не настолько полезный. - Вы можете выборочно включить смешивание некоторых спрайтов, используя
ATTR0_TYPE_BLENDED
.Уровень наложения будет одинаковым для всех спрайтов (и слоев) - спрайты растрового типа используют прямые цвета (минуя палитры), поэтому
ATTR2_PALETTE()
поле спрайтов GBA бесполезно и было переработано вATTR2_ALPHA
.
Другие советы
Спрайты на DS могут быть альфа-смешаны с помощью регистры управления смешиванием.TONC предоставляет необходимую информацию для того, чтобы заставить смешивание работать на главном экране, поскольку расположение регистров одинаковое.Альфа-блендинг на подэкране использует один и тот же процесс с разными регистрами со смещением в 1000 часов.
Реестры, на которые вы будете смотреть, следующие REG_BLDMOD
, REG_COLV
, и REG_COLY
для главного экрана и REG_BLDMOD_SUB
, REG_COLV_SUB
, и REG_COLY_SUB
для дополнительного экрана.
Также помните, что вам придется измените графический режим спрайта чтобы включить смешивание для каждого спрайта.
Это было очень длинный прошло много времени с тех пор, как я занимался программированием на GBA, но, насколько я помню, DS поддерживает большую часть (если не все) того, что поддерживает GBA. Это по ссылке есть раздел о том, как выполнить альфа-смешивание для GBA (раздел 13.2).Я не знаю, есть ли специфичный для DS способ сделать это, но у вас это должно сработать.