[PR]
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
プログラミング、3DCGとその他いろいろについて
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
Microsoftのゲーム開発ツールであるXNAで透過を行いたいときの注意についてメモしておきます。
XNAでは、(というか、これはXNAに限ったことではないのですが、)表示するものを透明にすることが出来ます。
これは、ゲームを作るときに、例えばビームや爆発の炎などの、奥が透けて見えるものを表示するのに役に立つでしょう。
ちょうどこんな感じです:
(この炎のイメージはXNA Creators Club OnlineのサンプルParticle 3D Sampleのexplosion.pngを利用しています。)
3つの炎のイメージが重なって表示されています。奥のほうの炎が透けて見えます。
ちなみに、透過を行わなかったら奥の炎は透けて見えません。
透過を有効にするには描画直前に次のようにします。
GraphicsDevice.RenderState.AlphaBlendEnable = true;
GraphicsDevice.RenderState.AlphaBlendOperation = BlendFunction.Add;
GraphicsDevice.RenderState.SourceBlend = Blend.SourceAlpha;
GraphicsDevice.RenderState.DestinationBlend = Blend.One;
しかしこのままでは問題があって、それは何かというと、炎の描画の順番によって炎が透けないことがあるということです。(つまり回転させると、透けたり透けなかったりします。)
(上の4行以外に何もしないと、中途半端に透明になります。ここでは、一番右の炎が手前の炎のイメージに隠れてしまっています。一方、左奥の炎は透けて見えます。これは、透けるか透けないかに3つの炎を描画する順番が関係しているためです。)
次の行を追加すると、問題が解決されるようです。(一番初めの画像のようになります)
GraphicsDevice.RenderState.DepthBufferWriteEnable = false;