Nintendo DS Homebrew 中的 Alpha 混合精灵

发布于 2024-07-04 03:23:22 字数 143 浏览 11 评论 0原文

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

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

I'm trying to alpha blend sprites and backgrounds with devkitPro (including libnds, libarm, etc).

Does anyone know how to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

尹雨沫 2024-07-11 03:23:23

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

  • 源图层必须位于目标图层上方才能显示一些混合。 这意味着源层的优先级在数值上应低于目标层的优先级。
  • 源层将是半透明的,目标层将是透明的(是的,我发现这相当令人困惑)。

对于精灵,特别是,您有 3 种方法来实现 alpha - 根据您的需要以及您“准备支付”的金额进行混合:

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

As a generic reference, i once wrote a small blog entry about that issue. Basically, you first have to define which layer is alpha-blended against which other layer(s). Afaik,

  • the source layer(s) must be over destination layer(s) to have some blending displayed. that means the priority of source layers should be numerically lower than the the priority of destination layers.
  • the source layer is what is going to be translucent, the destination(s) is what is going to be seen through (and yes, i find this rather confusing).

For the sprites, specifically, you then have 3 ways to achieve alpha-blending depending on what you need and what you're "ready to pay" for it:

  • You can make all the sprites have some alpha-blending by turning on BLEND_SRC_SPRITE in REG_BLDCNT[_SUB] ... not that useful.
  • You can selectively turn on blending of some sprites by using ATTR0_TYPE_BLENDED. The blending level will be the same for all sprites (and layers)
  • bitmap-type sprites use direct colors (bypassing the palettes), so the ATTR2_PALETTE() field of GBA sprites is useless and has been recycled into ATTR2_ALPHA.
长安忆 2024-07-11 03:23:23

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

It's been a long time since I've done any GBA programming, but as I recall, the DS supports most (if not all) of the stuff that GBA supports. This link has a section on how to do alpha blending for GBA (section 13.2). I don't know if there's a DS-specific way of doing it, but this should work for you.

累赘 2024-07-11 03:23:23

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

您将看到的寄存器是主屏幕的 REG_BLDMODREG_COLVREG_COLY 以及 REG_BLDMOD_SUBREG_COLV_SUBREG_COLY_SUB 用于子屏幕。

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

Sprites on the DS can be alpha blended using the blend control registers. TONC gives the necessary information for getting blending working on the main screen because the register locations are the same. Alpha blending on the subscreen uses the same process with different registers at a 1000h offset.

The registers you'll be looking at are REG_BLDMOD, REG_COLV, and REG_COLY for the main screen and REG_BLDMOD_SUB, REG_COLV_SUB, and REG_COLY_SUB for the sub screen.

Also remember that you'll have to change the sprite's graphic mode to enable blending per sprite.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文