「SharpDX.Direct3D11.DeviceContext.OutputMerger.Blendstate」を機能させようとしています。これがなければ、素敵なシーンがあります (スペースシューター用のテクスチャ付きのポリゴン)。私は過去 3 年間 OpenGL グラフィックスを扱ってきたので、OpenGL と同じくらい簡単かもしれないと思っていました。ブレンディングを有効にして、適切な Dst/Src モードを設定するだけです。しかし、新しい BlendStateDescription を設定すると、「RenderTarget[x].IsBlendEnabled」が「false」に設定されていても、すべての出力が黒になります。チュートリアルか何かを検索して見つけましたが、エフェクトを使用しています。だから私の質問は簡単です - SharpDX で技術と効果を使用する必要がありますか? 単純なブレンドを行う方法は他にありませんか?
これは私がやったことです:
mBackBuffer = Texture2D.FromSwapChain<Texture2D>(mSwapChain, 0);
mRenderView = new RenderTargetView(mDevice, mBackBuffer);
mContext.OutputMerger.SetTargets(mDepthStencilView, mRenderView);
mContext.OutputMerger.SetBlendState(new BlendState(mDevice, new BlendStateDescription()), new SharpDX.Color4(1.0f), -1);
mContext.OutputMerger.BlendState.Description.RenderTarget[0].IsBlendEnabled = true;
mContext.OutputMerger.BlendState.Description.RenderTarget[0].SourceBlend = BlendOption.SourceAlpha;
mContext.OutputMerger.BlendState.Description.RenderTarget[0].DestinationBlend = BlendOption.InverseSourceAlpha;
mContext.OutputMerger.BlendState.Description.RenderTarget[0].BlendOperation = BlendOperation.Add;
mContext.OutputMerger.BlendState.Description.RenderTarget[0].SourceAlphaBlend = BlendOption.One;
mContext.OutputMerger.BlendState.Description.RenderTarget[0].DestinationAlphaBlend = BlendOption.Zero;
mContext.OutputMerger.BlendState.Description.RenderTarget[0].AlphaBlendOperation = BlendOperation.Add;
mContext.OutputMerger.BlendState.Description.RenderTarget[0].RenderTargetWriteMask = ColorWriteMaskFlags.All;
そして、単に行うだけでも:
mContext.OutputMerger.SetBlendState(new BlendState(mDevice, new BlendStateDescription()), new SharpDX.Color4(1.0f), -1);
mContext.OutputMerger.BlendState.Description.RenderTarget[0].IsBlendEnabled = false;
出力はすべて黒です..多分私はピクセルシェーダーで何かを変更する必要がありますか?