【问题标题】:Alpha blending sprites in Nintendo DS HomebrewNintendo DS Homebrew 中的 Alpha 混合精灵
【发布时间】:2010-09-05 15:39:34
【问题描述】:

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

有人知道怎么做吗?

【问题讨论】:

    标签: c++ c nintendo-ds


    【解决方案1】:

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

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

    对于sprites, specifically,您可以通过 3 种方法来实现 alpha 混合,具体取决于您的需求以及您“准备支付”的费用:

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

    【讨论】:

      【解决方案2】:

      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 才能启用每个精灵的混合。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2018-02-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-13
          • 1970-01-01
          • 1970-01-01
          • 2010-09-13
          • 2013-08-21
          相关资源
          最近更新 更多