Nintendo DS Homebrew 中的 Alpha 混合精灵
我正在尝试使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
作为一般参考,我曾经写过一篇关于此的小博客文章问题。 基本上,您首先必须定义哪个图层与其他图层进行 alpha 混合。 据我所知,
对于精灵,特别是,您有 3 种方法来实现 alpha - 根据您的需要以及您“准备支付”的金额进行混合:
REG_BLDCNT[_SUB] 中启用
...没那么有用。BLEND_SRC_SPRITE
来使所有精灵进行一定程度的 alpha 混合ATTR0_TYPE_BLENDED
有选择地启用某些精灵的混合。 所有精灵(和图层)的混合级别都是相同的,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,
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:
BLEND_SRC_SPRITE
inREG_BLDCNT[_SUB]
... not that useful.ATTR0_TYPE_BLENDED
. The blending level will be the same for all sprites (and layers)ATTR2_PALETTE()
field of GBA sprites is useless and has been recycled intoATTR2_ALPHA
.我已经很长时间没有做过任何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.
DS 上的精灵可以使用混合控制寄存器进行 alpha 混合。 TONC 提供了在主屏幕上进行混合工作所需的信息,因为寄存器位置相同。 子屏幕上的 Alpha 混合使用相同的过程,但偏移量为 1000h 的不同寄存器。
您将看到的寄存器是主屏幕的
REG_BLDMOD
、REG_COLV
和REG_COLY
以及REG_BLDMOD_SUB
,REG_COLV_SUB
和REG_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
, andREG_COLY
for the main screen andREG_BLDMOD_SUB
,REG_COLV_SUB
, andREG_COLY_SUB
for the sub screen.Also remember that you'll have to change the sprite's graphic mode to enable blending per sprite.