Альфа-смешение спрайтов в Nintendo DS Homebrew - PullRequest
7 голосов
/ 10 августа 2008

Я пытаюсь смешать альфа-спрайты и фоны с devkitPro (включая libnds, libarm и т. Д.).

Кто-нибудь знает, как это сделать?

Ответы [ 3 ]

4 голосов
/ 14 августа 2008

Спрайты на DS могут быть смешаны в альфа-формате с помощью регистров управления смешиванием . TONC предоставляет необходимую информацию для того, чтобы смешивание работало на главном экране, потому что регистры совпадают. Альфа-смешивание на подэкране использует один и тот же процесс с разными регистрами со смещением 1000 часов.

Регистры, которые вы просматриваете: REG_BLDMOD, REG_COLV и REG_COLY для основного экрана и REG_BLDMOD_SUB, REG_COLV_SUB и REG_COLY_SUB для подэкрана.

Также помните, что вам придется изменить графический режим спрайта , чтобы включить смешивание для каждого спрайта.

4 голосов
/ 23 сентября 2008

В качестве общей ссылки я однажды написал небольшую запись в блоге об этой проблеме. По сути, сначала вы должны определить, какой слой альфа-смешивается с другими слоями. AFAIK,

  • исходный слой (слои) должен находиться над целевым слоем (слоями), чтобы отображалось некоторое смешение. это означает, что приоритет исходных слоев должен быть численно ниже, чем приоритет целевых слоев.
  • исходный слой - это то, что будет полупрозрачным, назначение (я) - это то, что будет видно через (и да, я нахожу это довольно запутанным).

Для спрайтов, в частности , у вас есть 3 способа добиться альфа-смешения в зависимости от того, что вам нужно и за что вы «готовы платить»:

  • Вы можете заставить все спрайты иметь альфа-смешение, включив BLEND_SRC_SPRITE в REG_BLDCNT[_SUB] ... не так уж и полезно.
  • Вы можете выборочно включить смешивание некоторых спрайтов с помощью ATTR0_TYPE_BLENDED. Уровень смешивания будет одинаковым для всех спрайтов (и слоев)
  • используют прямые цвета (в обход палитр), поэтому поле спрайтов GBA ATTR2_PALETTE() бесполезно и было переработано в ATTR2_ALPHA.
0 голосов
/ 11 августа 2008

Прошло долгое время с тех пор, как я занимался программированием GBA, но, насколько я помню, DS поддерживает большинство (если не все) из того, что поддерживает GBA. Эта ссылка содержит раздел о том, как сделать альфа-смешивание для GBA (раздел 13.2). Я не знаю, есть ли способ сделать это для DS, но это должно сработать для вас.

...