2010-04-10 75 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;