2012-05-11 1 views
1

私はゲームプレイをXNAのRenderTarget2Dにレンダリングしようとしていますので、シーンにシェーダを適用できます。ある程度機能していますが、255以外のアルファレベルで描画されたものは紫色のように見えます。アルファ効果が働いていますが、紫の色合いもあります。私は解決策を探してみましたが、唯一見えるのはフルスクリーンが紫色にレンダリングされているか、アルファが紫色に置き換えられていることです。RenderTarget2Dはすべてアルファベットを着色します

私の問題は、それらの...

Tinting purple!

のかなりのいずれかこれは私が何が起こっているかを示すために投げたシーンではありません。ご覧のように、アルファ効果は働いていますが、オブジェクトは紫色です。これは私が使用している初期化され

gameTarget = new RenderTarget2D(GraphicsDevice, (int)screenSize.X, (int)screenSize.Y, 1, SurfaceFormat.Color, RenderTargetUsage.PreserveContents); 

gameDepthBuffer = new DepthStencilBuffer(GraphicsDevice, (int)screenSize.X, (int)screenSize.Y, GraphicsDevice.DepthStencilBuffer.Format); 

ここに私は私のレンダリングコードを投稿する部分があります。

GraphicsDevice g = GraphicsDevice; 
DepthStencilBuffer d = g.DepthStencilBuffer; 
g.SetRenderTarget(0, gameTarget); 
g.DepthStencilBuffer = gameDepthBuffer; 
g.Clear(Color.Black); 
GameBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.SaveState); 
     level.Draw(GameBatch); 

GameBatch.End(); 
g.SetRenderTarget(0, null); 
g.DepthStencilBuffer = d; 
GameBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.SaveState); 
     if (renderEffect != null) 
     { 
      renderEffect.Begin(); 
      renderEffect.CurrentTechnique.Passes[0].Begin(); 
     } 
     Sprite.Draw(GameBatch, gameTarget.GetTexture(), new Rectangle(0, 0, (int)assumedSize.X, (int)assumedSize.Y), Color.White); 
     if (renderEffect != null) 
     { 
      renderEffect.CurrentTechnique.Passes[0].End(); 
      renderEffect.End(); 
     } 
     GameBatch.End(); 

renderEffectは、スプライトが(さまざまな解像度に対応する)と仮定画面サイズに対して描画を扱うクラスである、エフェクトファイルです。

私はXNA 3.1で作業しています。私は今は4.0を使うべきだと知っていますが、特定の状況で役立つ3.1に関する本があるので、私はそうではありません。

とにかく、ここでいくつかの助けをいただければ幸いです...

+0

はおそらく – musefan

+0

[gamedev](http://gamedev.stackexchange.com/)で、この1を超える依頼するより良いされている場合がありますが、私は存在を知りませんでしたあなたがリンクを投稿するまで、gamedevセクションの – Hoeloe

答えて

1

固定!私はいくつかのアルファパラメータを設定するために必要な:

GraphicsDevice.RenderState.SeparateAlphaBlendEnabled = true; 
GraphicsDevice.RenderState.AlphaDestinationBlend = Blend.One; 
GraphicsDevice.RenderState.AlphaSourceBlend = Blend.SourceAlpha; 
GraphicsDevice.RenderState.SourceBlend = Blend.SourceAlpha; 
GraphicsDevice.RenderState.DestinationBlend = Blend.InverseSourceAlpha; 
3

一般的に紫はレンダーターゲットがクリアされているデフォルトの色です。

これを念頭に置いて、レンダーターゲットをnullに設定した後で、バックバッファをクリアしていないことがわかりました。したがって、コードは次のようになります。

g.SetRenderTarget(0, null); 
g.Clear(Color.Transparent);//or black 
+0

ありがとう、それはトリックでした。 TransparentBlackに設定すればうまくいきました。 – Hoeloe

+0

実際、それをもう一度見てみると、今はすべてが黒くなっています。 XNA 3.1には "Color.Transparent"がありませんので、何をすべきかわかりません。 – Hoeloe

+0

待って、それを固定してください。私は自分の答えを投稿します... – Hoeloe

関連する問題