Alpha混合精灵在Nintendo DS Homebrew中

taut 发布于 2018-03-14 c 最后更新 2018-03-14 01:09 495 浏览

我正在尝试将Sprite和背景与devkitPro(包括libnds,libarm等)混合在一起。 有谁知道如何做到这一点?

已邀请:

vsit

赞同来自:

从我完成任何GBA编程开始,这是一段很长的时间,但是据我所知,DS支持GBA支持的大部分(如果不是全部的话)。 This链接有一个关于如何为GBA做alpha混合的部分(13.2节)。我不知道是否有DS特定的方法,但这应该适用于您。

tquod

赞同来自:

DS上的精灵可以使用blend control registers进行alpha混合。由于寄存器位置相同,TONC提供了在主屏幕上进行混合工作的必要信息。子屏幕上的Alpha混合在1000h偏移处使用与不同寄存器相同的过程。 您要查看的寄存器是主屏幕的REG_BLDMODREG_COLVREG_COLY,以及子屏幕的REG_BLDMOD_SUBREG_COLV_SUBREG_COLY_SUB。 另外请记住,您必须使用change the sprite's graphic mode来启用每个精灵的混合。

fnam

赞同来自:

作为泛型引用,我曾经写过有关该问题的a small blog entry。基本上,您首先必须定义哪个图层与其他图层进行了alpha混合。据我所知,

  • 源图层必须位于目标图层上才能显示一些混合。这意味着源图层的优先级应该在数值上低于目标图层的优先级。
  • 源图层将是半透明的,目的地是将要透过的东西(是的,我觉得这很容易混淆)。
  • 对于sprites, specifically,您可以通过3种方式实现alpha混合,具体取决于您需要什么以及您准备付费的内容:
    • 通过打开REG_BLDCNT[_SUB]中的BLEND_SRC_SPRITE ...,可以让所有精灵都具有一些alpha混合效果。
    • 您可以使用ATTR0_TYPE_BLENDED有选择地开启某些精灵的混合。所有精灵(和图层)的混合级别将相同
    • 位图类型的精灵使用直接的颜色(绕过调色板),因此GBA精灵的ATTR2_PALETTE()字段没有用处,并且已被回收到ATTR2_ALPHA中。