Alpha blending sprites no Nintendo DS Homebrew
-
08-06-2019 - |
Pergunta
Eu estou tentando mistura alfa sprites e backgrounds com devkitPro (incluindo libnds, libarm, etc.).
Alguém sabe como fazer isso?
Solução
Como uma referência genérica, uma vez eu escrevi uma pequena entrada de blog sobre esse problema.Basicamente, você precisa primeiro definir que a camada é alfa-misturado contra a qual outra camada(s).Afaik,
- a fonte de camada(s) deve ser sobre o destino de camada(s) para ter alguma mistura exibida.isso significa que a prioridade da fonte de camadas deve ser numericamente menor do que a prioridade de destino camadas.
- camada de origem é o que vai ser translúcido, o destino(s) é o que vai ser visto através de (e sim, eu acho isso muito confuso).
Para o sprites, especificamente, em seguida, você tem 3 maneiras de conseguir alpha-blending, dependendo do que você precisa e o que você está "disposta a pagar" para isso:
- Você pode fazer todos os sprites tem alguns alpha-blending ligando
BLEND_SRC_SPRITE
noREG_BLDCNT[_SUB]
...não é tão útil. - Você pode ativar a mistura de alguns sprites usando
ATTR0_TYPE_BLENDED
.A mistura de nível vai ser o mesmo para todos os sprites (e camadas) - bitmap tipo de sprites uso direto cores (ignorando o paletas), de modo que o
ATTR2_PALETTE()
campo de GBA sprites é inútil e tem sido reciclado emATTR2_ALPHA
.
Outras dicas
Sprites do nintendo DS pode ser combinada alfa usando o mistura de registradores de controle.TONC dá as informações necessárias para a obtenção de mistura trabalhar na tela principal, porque a registrar os locais são os mesmos.Alpha blending na subtela utiliza o mesmo processo com registros diferentes em um 1000h deslocamento.
Os registros que você vai estar olhando em são REG_BLDMOD
, REG_COLV
, e REG_COLY
para a tela principal e REG_BLDMOD_SUB
, REG_COLV_SUB
, e REG_COLY_SUB
para o ecrã secundário.
Lembre-se também de que você vai ter que mudar o sprite gráfico do modo de para habilitar a mistura por sprite.
Tem sido um longo tempo desde que eu fiz de qualquer CARTUCHO de programação, mas se bem me lembro, o DS suporta a maioria (se não todas) das coisas que GBA oferece suporte. Este link tem uma seção sobre como fazer alpha blending para GBA (seção 13.2).Eu não sei se existe um DS ou um específico modo de fazê-lo, mas isso deve funcionar para você.