Alpha混合精灵在Nintendo DS Homebrew中

时间:2008-08-10 14:49:11

标签: c++ c nintendo-ds

我正在尝试使用devkitPro(包括libnds,libarm等)将精灵和背景进行alpha混合。

有谁知道怎么做?

3 个答案:

答案 0 :(得分:4)

DS上的精灵可以使用blend control registers进行alpha混合。 TONC提供了在主屏幕上进行混合工作所需的信息,因为寄存器位置相同。子屏幕上的Alpha混合使用相同的过程,在1000h偏移处使用不同的寄存器。

您要查看的注册表为主屏幕REG_BLDMODREG_COLVREG_COLY以及REG_BLDMOD_SUBREG_COLV_SUB和{{ 1}}用于子屏幕。

另外请记住,您必须change the sprite's graphic mode才能启用每个精灵的混合。

答案 1 :(得分:4)

作为一般参考,我曾写过关于这个问题的a small blog entry。基本上,您首先必须定义哪个图层与其他图层进行alpha混合。 AFAIK,

  • 源图层必须位于目标图层上以显示某些混合。这意味着源图层的优先级应该在数值上低于目标图层的优先级。
  • 源层是半透明的,目的地是可以看到的(是的,我发现这相当混乱)。

对于sprites, specifically,您可以通过3种方式实现Alpha混合,具体取决于您需要的内容以及您“准备支付”的内容:

  • 你可以通过开启BLEND_SRC_SPRITE中的REG_BLDCNT[_SUB]来让所有精灵都进行一些alpha混合......不是那么有用。
  • 您可以使用ATTR0_TYPE_BLENDED有选择地启用某些精灵的混合。所有精灵(和图层)的混合级别都相同
  • 位图类型的精灵使用直接颜色(绕过调色板),因此GBA精灵的ATTR2_PALETTE()字段无用且已被回收到ATTR2_ALPHA

答案 2 :(得分:0)

自从我完成任何GBA编程以来,这是很长时间,但我记得,DS支持GBA支持的大部分(如果不是全部)内容。 This链接有一节介绍如何为GBA进行Alpha混合(第13.2节)。我不知道是否有特定于DS的方法,但这应该适合你。