0

我在使用 RenderToSurface 绘制半透明对象时遇到问题(当我直接在设备上绘制对象时它正在工作文件)。问题是当我在 RenderToSurface 上绘制 Alpha 值为 50% 的对象时,当我在设备上绘制表面时,对象的透明度无效。我的代码如下。

[代码] RenderingSurface.BeginScene(RenderTexture.GetSurfaceLevel(0), view);

                _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渲染目标是使用具有 Alpha 通道(A8R8G8B8 而不是 X8R8G8B8)的 PixelFormat 创建的。

此外,在渲染目标中渲染时,请确保使用 Alpha 通道的正确混合模式渲染状态将生成的 Alpha 写入表面。请注意,alpha ( AlphaDestinationBlend, AlphaSourceBlend, ...) 和颜色 ( DestinationBlend, SourceBlend, ...) 的混合模式是不同的;确保两者都设置。

于 2011-11-23T20:28:54.127 回答