2010-04-10 66 views
1

我正在使用XNA,並且遇到了一些小問題。我需要支持多個圖層,每個圖層都有一個不同的z順序(我稱之爲「視口」)。一張圖片勝過千言萬語,所以這裏是它應該是什麼樣子:在XNA中渲染多個圖層

http://www.charlesstrahan.com/so_files/viewports.png

有幾件事情需要注意。正如你可以看到Sprite B所看到的那樣,Sprites不會在其視口之外渲染。另外,請注意視口的渲染方式 - 它與Photoshop中的「圖層」非常相似。儘管Sprite C具有-1000的z順序,但C仍然呈現在Sprite A之上,因爲其視口的z順序大於A的視口z順序。

在上面的圖片中,我無法很好地展示最後一個細節。每個視口都需要在屏幕的區域內可選地呈現顏色 - 您可以將其視爲「調色」效果。

對於在XNA中實現這個最好的方式,我完全不知所措,所以我真的可以使用一小段C#/ VB.NET代碼來演示這個動作。任何幫助將不勝感激。

回答

1

您可以通過RenderTargets輕鬆做到這一點:-)關於如何在網絡上使用它們(example),有大量資源。

如果您剛剛開始yoru項目,請考慮安裝XNA 4.0(現在通過Windows Phone SDK在CTP中)。它在新版本中變得容易得多......從Shawn Hargreaves最近推出的一篇文章中,RenderTarget changes in XNA Game Studio 4.0

List<Texture2D> textures = new List<Texture2D>(); 

for (int i = 0; i < 100; i++) 
{ 
    RenderTarget2D rt = new RenderTarget2D(...); 

    GraphicsDevice.SetRenderTarget(rt); 
    DrawCharacterAnimationFrame(i); 
    GraphicsDevice.SetRenderTarget(null); 

    textures.Add(rt); 
} 

與「着色」功能,你問的是新空房禁地容易這一點,因爲你可以調用Clear方法,當你去呈現每個渲染任何你想要的顏色的目標。

0

您可以將對象只是排序分組,然後使每個有序組剪報

device.ClipPlanes[0].Plane = plane; 
device.ClipPlanes[0].IsEnabled = true;