Спрайты с альфа-смешиванием в Nintendo DS Homebrew

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

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
9
0
1 965
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

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

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

Ответ принят как подходящий

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

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

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

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

Другие вопросы по теме