Рендеринг нескольких слоев в XNA - PullRequest
1 голос
/ 11 апреля 2010

Я использую XNA и столкнулся с небольшой проблемой. Мне нужно поддерживать несколько слоев, каждый из которых имеет свой собственный порядок z (я называю эти «области просмотра»). Картинка стоит тысячи слов, вот как она должна выглядеть:

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

Здесь нужно отметить несколько вещей. Спрайты не отображаются вне своего окна просмотра, как вы можете видеть в Sprite B. Также обратите внимание на то, как визуализируются окна просмотра - это очень похоже на «слои» в Photoshop. Хотя Sprite C имеет порядок z -1000, C по-прежнему отображается выше Sprite A, поскольку z-порядок его окна просмотра больше, чем Z-порядок окна просмотра A.

Есть одна последняя деталь, которую я не смог бы показать очень хорошо на картинке выше. Каждый видовой экран должен дополнительно отображать цвет в своей области экрана - вы можете думать об этом как о «тонирующем» эффекте.

Я полностью в растерянности, когда дело доходит до того, чтобы сделать это наилучшим образом в XNA, поэтому я действительно мог бы использовать короткий фрагмент кода C # / VB.NET, который демонстрирует это в действии. Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 11 апреля 2010

Вы можете легко сделать это с помощью RenderTargets :-) Существует множество ресурсов о том, как использовать их в Интернете ( пример ).

Если вы только начинаете проект, рассмотрите возможность установки XNA 4.0 (в CTP прямо сейчас через Windows Phone SDK). В новой версии стало намного проще ... из статьи, которую недавно выпустила Шон Харгривз, Изменения RenderTarget в 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 голосов
/ 15 мая 2010

Вы можете просто отсортировать ваши объекты по группам, а затем визуализировать каждую группу в порядке с отсечением

device.ClipPlanes[0].Plane = plane;
device.ClipPlanes[0].IsEnabled = true;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...