2011年02月18日

【XNA】XNA3.1のSpriteBatchによる透過描画をXNA4.0で行う方法

XNA3.1のとき
spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.BackToFront, SaveStateMode.SaveState);

と定義し、Draw時のColor構造体にて
alphaの値を0に近づけることでスプライト画像や文字を透過させることができました。

これによりフェードや点滅といった表現を行ってきました。

しかし、XNA4.0からBeginの書き方が変更になり、
前の投稿にて3Dと2Dの描画時にGraphicsDeviceの設定を変更するっという内容を書きましたが、
今回はspriteBatchに関することをまとめました。

戦国無双3 Z(通常版)

新品価格
¥5,618から
(2011/2/18 01:55時点)




こちらのサイト様にて、文字を透過させて表示する際にXNA4.0での注意事項をまとめてくれていました。

XNA4.0では以下のように定義することでXNA3.1のときと同じ描画ができました。
spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.NonPremultiplied);

NonPremultipliedを定義しないといけない部分が大きなポイントです。
最初自分は3.1と同じようにBlendState.AlphaBlendを選択していました。

しかし、これで表示すると
Colorのalpha値が0に近づくにつれて色が白くなっていきました。
黒い文字のalphaを0にしていくと
文字の外枠に白い部分ができており、だんだんと黒い部分は透過していくのですが、
枠の白い部分ははっきりのこっていました。

WS000000.JPG

上記サイト様を参考に設定をBlendState.NonPremultipliedにすることで

WS000002.JPG

このようにきれいに透過していくことができました。

とりあえず、これでXNA3.1のころと同じ環境まで対応できたようです。
モデルデータも修正してもらったので、これでXNA4.0版でピアレビューに提出ができそうです。

あ、でも週末戦国無双3Zが届くから少し時間かかるかもしれません。
ラベル:XNA C#
posted by ヒイロ at 01:56| 福岡 ☔| Comment(0) | TrackBack(0) | プログラム | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。