Простой пример, как добавить в Chase Camera Sample (XNA 2.0) эффект полноэкранного ускорения (за счет смазанности) движения. Motion Blur особенно хорошо смотрится на динамичных сценах. На все про все уйдет не более 5-ти минут...
Урок Chase Camera был выбран именно из за динамичности отображаемой сцены.
Теперь добавим к этой сцене Motion Blur. Все изменения будут в классе ChaseCameraGame.
Для работы, этот эффект использует дополнительную текстуру, в которой будут хранится наложенные друг на друга кадры всей сцены -
Код
ResolveTexture2D blendTexture;
Изменим конструктор ChaseCameraGame, добавив в него код установки нужного нам формата бэк буфера -
spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.SaveState);
spriteBatch.Draw(blendTexture, Vector2.Zero, new Color(255, 255, 255, 200)); // 200 - величина блюра
spriteBatch.End();
DrawOverlayText();
base.Draw(gameTime);
}
Вот и всё.
Работает очень просто, и главное быстро. Отрисованная сцена сохраняется в нашей новой текстуре, после этого мы накладываем отрисованную сцену на саму себя используя полноэкранный спрайт. При наложении указываем цвет, с помощью которого будет происходить смешивание. Альфа канал этого цвета играет роль величины блюра. Чем меньше альфа, тем меньше блюр. Чем больше блюр, тем больше кадров мы сможем "запомнить" в текстуре, так как от величины блюра на прямую зависит на сколько быстро кадр исчезнет.
Разумеется это не полноценный Motion Blur, но зато достаточно точная имитация. Есть ограничение на количество FPS - если их слишком много, блюр будет так быстро исчезать, что станет незаметен. По этому, лучше всего этот эффект смотрится когда включена вертикальная синхронизация, что ограничивает FSP в пределах 60-ти...