9

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

有谁知道如何做到这一点?

4

3 回答 3

6

作为一般参考,我曾经写过一篇关于该问题的小型博客文章。基本上,您首先必须定义哪个图层与哪个其他图层进行 alpha 混合。AFAIK,

  • 源图层必须在目标图层上方才能显示一些混合。这意味着源层的优先级在数值上应该低于目标层的优先级。
  • 源层是半透明的,目标层是要被看到的(是的,我觉得这很混乱)。

对于精灵,具体来说,您可以通过 3 种方法来实现 alpha 混合,具体取决于您需要什么以及您“准备支付”的费用:

  • 您可以通过打开来使所有精灵都具有一些 alpha 混合BLEND_SRC_SPRITE...REG_BLDCNT[_SUB]不是那么有用。
  • 您可以使用 有选择地打开某些精灵的混合ATTR0_TYPE_BLENDED。所有精灵(和图层)的混合级别将相同
  • 位图类型的精灵使用直接颜色(绕过调色板),所以ATTR2_PALETTE()GBA 精灵的字段没用,已经被回收到ATTR2_ALPHA.
于 2008-09-23T08:39:44.120 回答
4

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

您将看到的寄存器是REG_BLDMOD, REG_COLV, 和REG_COLY用于主屏幕和REG_BLDMOD_SUB, REG_COLV_SUB, 和REG_COLY_SUB用于子屏幕。

另请记住,您必须更改精灵的图形模式才能启用每个精灵的混合。

于 2008-08-14T00:32:58.377 回答
0

我已经很久没有进行任何 GBA 编程了,但我记得,DS 支持 GBA 支持的大部分(如果不是全部)东西。链接有一节介绍如何为 GBA 进行 alpha 混合(第 13.2 节)。我不知道是否有特定于 DS 的方法,但这应该适合你。

于 2008-08-11T16:45:39.677 回答