2011-11-23 69 views
0

在使用RenderToSurface繪製半透明對象時(當我在設備上繪製對象時繪製對象時),我面臨問題。問題是當我在RenderToSurface上繪製Alpha值爲50%的對象時,以及當我繪製表面到設備時,對象的透明度無效。我的代碼如下。在使用RenderToSurface繪圖時出現透明問題

[code] 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(); 
    } 
+1

你是指「物體的透明度無效」是什麼意思? – NickLH

+0

對象的透明度無效意味着它進一步縮小,在繪製RenderToSurface後它比實際透明度更高。 – Firoz

回答

0

確保您RenderSurface渲染目標與具有Alpha通道(A8R8G8B8而不是X8R8G8B8)一個的PixelFormat創建。

此外,在渲染目標中渲染時,確保使用Alpha通道的正確混合模式渲染狀態將結果alpha寫入曲面。請注意,阿爾法(AlphaDestinationBlend,AlphaSourceBlend,...)和顏色(DestinationBlend,SourceBlend,...)的混合模式不同;確保你設置了兩個。

+0

感謝Coincoin它解決了我的問題。 – Firoz