0

RenderToSurface で半透明のオブジェクトを描画しているときに問題に直面しています (デバイス上で直接オブジェクトを描画しているときにファイルを操作している間)。問題は、RenderToSurface でアルファ値が 50% のオブジェクトを描画しているときに、サーフェスをデバイスに描画しているときに、オブジェクトの透明度が無効になることです。私のコードは次のとおりです。

[コード] RenderingSurface.BeginScene(RenderTexture.GetSurfaceLevel(0), ビュー);

                _device.Clear(ClearFlags.Target| ClearFlags.ZBuffer, Color.FromArgb(0, Color.Black), 1.0f, 0);
                using (Sprite s = new Sprite(_device))
                {
                        s.Begin(SpriteFlags.DoNotSaveState);
                    s.Draw(ObjecTexture, new Microsoft.DirectX.Vector3(0, 0, 0), new Microsoft.DirectX.Vector3(0, 1, 0), Color.White.ToArgb());
                    s.End();
                }
                RenderingSurface.EndScene(Filter.None);

RenderSurface は 50% の透明度で同じ形状をしています。

サーフェスを描画するコード。

_device.BeginScene();
        _device.Clear(ClearFlags.Target | ClearFlags.ZBuffer | ClearFlags.Stencil, BackgroundColor, 1, 0);

  using (Sprite s = new Sprite(_device))
    {
        s.Begin(SpriteFlags.DoNotSaveState);
        s.Draw(RenderTexture, new Microsoft.DirectX.Vector3(0, 0, 0), new Microsoft.DirectX.Vector3(0, 1, 0), Color.White.ToArgb());
        s.End();
    }
4

1 に答える 1

0

RenderSurfaceレンダリングターゲットがアルファチャネル(X8R8G8B8ではなくA8R8G8B8)を持つPixelFormatで作成されていることを確認してください。

また、レンダリングターゲットでレンダリングするときは、アルファチャネルの適切なブレンドモードのレンダリング状態を使用して、結果のアルファがサーフェスに書き込まれていることを確認してください。AlphaDestinationBlendアルファ( 、、AlphaSourceBlend...)と色(、、 ...)DestinationBlendのブレンドモードSourceBlendが異なることに注意してください。必ず両方を設定してください。

于 2011-11-23T20:28:54.127 に答える