Nintendo DS Homebrew のアルファ ブレンディング スプライト
-
08-06-2019 - |
質問
スプライトと背景をアルファブレンドしようとしています 開発キットプロ (libnds、libarm などを含む)。
誰かこれを行う方法を知っていますか?
解決
一般的な参考として、私はかつてこう書きました 小さなブログエントリー その問題について。基本的に、最初にどのレイヤーが他のどのレイヤーに対してアルファブレンドされるかを定義する必要があります。私の知る限り、
- ブレンドを表示するには、ソース レイヤが宛先レイヤの上にある必要があります。つまり、ソース レイヤの優先順位は、宛先レイヤの優先順位よりも数値的に低くなければなりません。
- ソース層は半透明になるもので、デスティネーション層は透けて見えるものです(はい、これはかなり混乱すると思います)。
のために スプライト、特に, では、何が必要か、そしてそれに対して「支払う準備ができている」かどうかに応じて、アルファ ブレンディングを実現するには 3 つの方法があります。
- をオンにすることで、すべてのスプライトにアルファ ブレンドを適用できます。
BLEND_SRC_SPRITE
でREG_BLDCNT[_SUB]
...それほど役に立ちません。 - を使用して、一部のスプライトのブレンドを選択的にオンにすることができます。
ATTR0_TYPE_BLENDED
. 。ブレンド レベルはすべてのスプライト (およびレイヤー) で同じになります。 - ビットマップ タイプのスプライトは直接カラーを使用する(パレットをバイパスする)ため、
ATTR2_PALETTE()
GBA スプライトのフィールドは役に立たないため、リサイクルされました。ATTR2_ALPHA
.
他のヒント
DS 上のスプライトは、 ブレンド制御レジスタ. 。レジスタの位置が同じであるため、TONC はメイン画面でブレンディングを動作させるために必要な情報を提供します。サブスクリーン上のアルファブレンディングは、1000h オフセットで異なるレジスタを使用した同じプロセスを使用します。
表示するレジスタは次のとおりです。 REG_BLDMOD
, REG_COLV
, 、 そして REG_COLY
メイン画面と REG_BLDMOD_SUB
, REG_COLV_SUB
, 、 そして REG_COLY_SUB
サブ画面用。
また、次のことを行う必要があることも覚えておいてください。 スプライトのグラフィックモードを変更する スプライトごとのブレンドを有効にします。
それは 長さ GBA プログラミングを初めてからかなり時間が経ちますが、思い出したように、DS は GBA がサポートするもののほとんど (すべてではないにしても) をサポートしています。 これ リンクには、GBA でアルファ ブレンディングを行う方法に関するセクションがあります (セクション 13.2)。DS 固有の方法があるかどうかはわかりませんが、これはうまくいくはずです。