【问题标题】:Render multiple layers in XNA在 XNA 中渲染多个图层
【发布时间】:2010-05-15 10:28:14
【问题描述】:

我正在使用 XNA,但遇到了一个小问题。我需要支持多个图层,每个图层都有不同的 z 顺序(我称这些为“视口”)。一张图片值一千字,所以它应该是这样的:

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

这里有几件事需要注意。 Sprite 不会在其视口之外渲染,正如您在 Sprite B 中看到的那样。另外,请注意视口是如何渲染的——它与 Photoshop 中的“图层”非常相似。尽管 Sprite C 的 z 顺序为 -1000,但 C 仍会在 Sprite A 上方渲染,因为它的视口的 z 顺序大于 A 的视口的 z 顺序。

在上图中,我无法很好地展示最后一个细节。每个视口都需要在其屏幕区域上选择性地渲染一种颜色 - 您可以将其视为“着色”效果。

当谈到在 XNA 中以最佳方式执行此操作时,我完全不知所措,因此我真的可以使用简短的 C#/VB.NET 代码 sn-p 来演示这一点。任何帮助将不胜感激。

【问题讨论】:

    标签: c# xna


    【解决方案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 方法。

    【讨论】:

      【解决方案2】:

      您可以将对象分组,然后使用剪辑按顺序渲染每个组

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多