Как визуализировать анимированную Texture2D в трехмерном мире в XNA4.0

Как я до сих пор изучал, есть 2 способа рисования в xna; используя spritebatch или размещая элементы в 3D-мире, а затем используйте камеру для его рендеринга.

Сейчас я работаю над своей 2.5D игрой. Я использую механику, которая заставляет более глубокий спрайт транслироваться медленнее, так что кажется, что в игре действительно есть глубина.

Однако, учитывая эффекты, т. е. постобработку, могут возникнуть некоторые проблемы, если я захочу визуализировать эти эффекты на среднем уровне глубины, то есть визуализировать их на моем персонаже с глубиной = 0,5, в то время как есть дерево переднего плана с глубиной = 0,8.

Таким образом, я рассматриваю возможность рендеринга своей игры в реальном 3D-мире.

Однако, поскольку я искал способ поместить свой спрайт и анимировать его в трехмерном мире, я не нашел его. (Возможно, это потому, что я не знал правильных ключевых слов.) Ближайшие темы, которые я нашел, касались PointSprite, который теперь удален из XNA4.0, поэтому я не мог реализовать его таким образом.

Мой вопрос в том, как я могу визуализировать свой анимированный спрайт (т.е. движение персонажа) в трехмерном мире.

Спасибо, купол


person Dome    schedule 27.10.2010    source источник


Ответы (2)


Хитрость заключается именно в том, что вы делали до сих пор, за исключением того, что вместо использования spritebatch для рисования «непосредственно» на экране вы вместо этого рисуете 2D-изображения на плоских «листах» в 3D-мире (с каждым «листом», состоящим из два треугольника образуют квадрат).

В качестве отправной точки я бы посоветовал посмотреть примеры построения четырехугольников, текстур и, возможно, целей рендеринга на сайте create.msdn.com.

person lzcd    schedule 27.10.2010

Новое в XNA 4.0: SpriteBatch можно использовать с BasicEffect.

Этот пост объясняет это. Он также предоставляет пример кода, который имитирует функциональность SpriteBatch по умолчанию через BasicEffect, но вы можете передать свои собственные матрицы для 3D-мира.

В частности: ваша «мировая» матрица будет описывать положение плоскости, на которой рисуются спрайты, в трехмерном пространстве. Матрица «вида» будет описывать взгляд вашей камеры на мир. А матрица «проекта» будет матрицей 3D-проекции (вероятно, из Matrix.CreatePerspective).

Кстати, эффект, который вы описываете, называется "параллакс прокрутка". Это не то же самое, что настоящее 3D (да и 2.5D — это тоже что-то другое).

Если вы хотите применить эффекты только к определенным слоям в сцене: вы можете либо применить эффект к этим спрайтам напрямую, передав эффект с пиксельным шейдером в SpriteBatch.Begin. Или, если ваши эффекты действительно являются эффектами постобработки (т. е. применяются ко всему экрану), вы можете использовать мишень рендеринга для рендеринга этого конкретного слоя за пределами экрана и затем рендерите его обратно на экран с вашим эффектом.

person Andrew Russell    schedule 27.10.2010