不況で倒産寸前のベンチャー企業(?)でプログラマー歴2年になった 新米プログラマーの日記のような雑記です。
welcome 猫並プログラマーの奮闘日記 !
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
category : スポンサー広告 

XNAでゲームつくり(フェードイン・フェードアウト)
とりあえず、プログラムの進行状況をメモするついでに書いていこうと思います。
今回はフェードイン・アウトについてメモ。シーン切り替えの定石エフェクトですね。
私は2D特化で作っているので2D前提で書きます。
ポイントはスプライトを描画するときに指定する乗算する色です。
SpriteBatch sp;
Texture2D tex;
sp.Draw(tex, pos, rect, col);
この色を0.0~1.0の範囲で増減させるだけです。

しかし、シーン全体だとスプライト全部に指定するのは非効率ですよね。
そこで使うのがRenderTarget2Dです。
GraphicsDeviceでは基本、バックバッファがレンダリングターゲットに指定されていますが。
SetRenderTargetメソッドでRenderTarget2Dに切り替えることができます。
一旦、レンダリングターゲットをRenderTarget2Dインスタンスに切替てから必要なものを描画します。
RenderTarget2DはGetTextureメソッドでレンダリングされたテクスチャを取得できます。
取得したテクスチャをSpriteBatchで色を増減させてバックバッファに描画すれば全体がフェードインアウトしたようになります。
//ソース抜粋
RenderTarget2D rd_target;
SpriteBatch sp;
rd_target = new RenderTarget2D(Game_Controll.GraphicsDevice, Game_Controll.WindowRect.Width, Game_Controll.WindowRect.Height, 0, SurfaceFormat.Color);

Game_Controll.GraphicsDevice.SetRenderTarget(0, rd_target);(←レンダリングターゲット切替)
Game_Controll.GraphicsDevice.Clear(Color.Black);

sp.Begin();
sp.Draw(tex, pos, rect, col);(←表示するテクスチャを描画)
sp.End();

Game_Controll.GraphicsDevice.SetRenderTarget(0, null);(←nullでバックバッファに切り替え)
Game_Controll.GraphicsDevice.Clear(Color.Black);
sp.Begin();
sp.Draw(rd_target.GetTexture(),
new Rectangle(0, 0, rd_target.GetTexture().Width, rd_target.GetTexture().Height),
new Color(fade_alpha, fade_alpha, fade_alpha, fade_alpha)
);(←RenderTarget2D のテクスチャを描画)
sp.End();

抜粋なんでわかりづらいかも(汗
注意なのはRenderTarget2D のコンストラクタで指定するSurfaceFormat。
デバイスによってサポートされていないものがあるので気をつけましょう。
SurfaceFormat.Colorが各チャンネル8ビットで無難だと思います。

2Dはこんな感じ、フェードイン以外でもレンダリングターゲットに描画しておくことでシーン全体にエフェクトをかけることができます。(ピクセルシェーダーとか)

3Dでも同じレンダリングターゲット切り替えてレンダリングします。
3Dだとレンダリングターゲットから取得したテクスチャをメッシュに貼り付けたりできるので、
表現の幅は広がるでしょうねぇ。

フェードイン・アウトしてる部分をうpしたかったんだけど動画としてキャプチャする方法がわからない・・・。
なんかいい方法あれば教えてください><。

------追記------
ちょっと試しに動画にしてみたので、公開。
これ、ちゃんと見えるのかな不安・・・。
[高画質で再生]

フェードインテスト

[広告] VPS
スポンサーサイト
category : サークル活動  comment : 0  track back : 0

thema:プログラミング - genre:コンピュータ















 

trackback URL
http://nekohara348.blog99.fc2.com/tb.php/93-5f95200c
trackback
プロフィール

猫原

Author:猫原
猫でもわかる程度の能力な新米プログラマーです。

扱える言語:
アセンブラ(intel系,SH系),C/C++,C#,
java,PHP,etc...

趣味
アニメとかゲームとかプログラムとか
ようするにオタク
(特にガンダム大好きです)

最近のマイブームはニコ動でアイマス架空戦記見ること
(千早かわいいよ千早)

フリーエリア
検索フォーム
ブロとも申請フォーム
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。