Опубликован: 14.08.2012 | Уровень: специалист | Доступ: платный
Самостоятельная работа 20:

Анимация, эффекты

27.2. Эффекты, EnvironmentMapEffect

Ранее для вывода трехмерных изображений мы пользовались шейдером BasicEffect. Он, действительно, очень часто используется и при разработке реальных игр. Однако, XNA имеет еще несколько встроенных шейдеров, в частности, SkinnedEffect, DualTextureEffect, AlphaTestEffect и EnvironmentMapEffect. Последним мы воспользуемся в нашем следующем примере для вывода трехмерного объекта, в котором отражается окружающий мир.

Прежде чем заниматься этим проектом, нам понадобится кубическая карта окружающего мира. Такую карту можно создать самостоятельно. Мы воспользовались готовыми изображениями с сайта http://www.humus.name/index.php?page=Textures. Здесь они представлены в разрешении 2048х2048, на рис. 27.2 приведена развёртка кубической карты, которой мы хотим воспользоваться в проекте.

Развертка кубической карты

Рис. 27.2. Развертка кубической карты

Для того, чтобы собрать из этих изображений кубическую карту, мы можем воспользоваться различными инструментами, в частности, в нашем случае этим инструментом стал Adobe Photoshop CS с установленным плагином Nvidia Textute Tools. Загрузить плагин можно здесь: http://developer.nvidia.com/nvidia-texture-tools-adobe-photoshop.

После установки плагина и подготовки изображений, нужно, в нашем случае, создать новое изображение размером 12288х2048 пикселей. Ширина изображения определяется произведением разрешения исходных изображений (2048) и их количеством. Мы имеем 6 изображений, для каждой из поверхностей кубической карты. Далее, нужно расположить эти изображения в следующем порядке:

Правое, Левое, Верхнее, Нижнее, Переднее, Заднее.

В итоге у нас получилось такое изображение для последующей конверсии в кубическую карту, рис. 27.3.

Изображения кубической карты, подготовленные в Photoshop

Рис. 27.3. Изображения кубической карты, подготовленные в Photoshop

Высота наших изображений – 2048, для работы нам понадобится карта, собранная из фрагментов по 512 пикселей в высоту. Изменим размер изображения (Image > Image Size) таким образом, чтобы его высота составила 512 пикселей, ширина, соответственно 3072 пикселя.

Учитывая то, что у нас уже установлены дополнения от Nvidia, выполним команду File > Save as и в появившемся окне выберем формат файла D3D/DDS. Появится окно, в котором нужно настроить параметры выходного файла. Эти настройки важны, на рис. 27.4 приведено окно с правильными настройками.

Настройки для сохранения кубической карты

Рис. 27.4. Настройки для сохранения кубической карты

После того, как карта сохранена, мы можем загружать её в проект. Кроме того, в проекте мы используем изображение для создания фона – мы вырезали один из фрагментов изображения, используемого для создания кубической карты. Далее, здесь же мы используем трехмерную модель. В целом, проект подготовлен с использованием примера Microsoft, распространяемого по лицензии MS-PL, оттуда же взята и трехмерная модель.

На рис. 27.5 приведено окно Обозреватель решений для проекта P20_2.

Обозреватель решений

Рис. 27.5. Обозреватель решений

Мы собираемся применять при выводе модели шейдер EnvironmentMapEffect, прежде чем заработает код, использующий этот шейдер, нам понадобится указать его в поле Эффект по умолчанию окна настройки свойств трехмерной модели, рис. 27.6.

Настройка свойств модели

Рис. 27.6. Настройка свойств модели

Кроме того, в проект мы добавили текстуру для модели, однако, текстура обрабатывается средствами файла модели, поэтому нужно отключить для неё параметры Обработчик контента в значение Обработка не требуется и Действие при построении в значение Нет. На самом деле, текстуру можно было бы не включать в состав контента, просто скопировав в папку, в которой хранится файл с моделью в структуре папок нашего проекта.

Гулич Анна
Гулич Анна
Невозможно пройти тесты, в окне с вопросами пусто
Сашечка Огнев
Сашечка Огнев
Россия, Красноярский край
Андрей Корягин
Андрей Корягин
Россия, Пенза, Вазерская средняя школа, 2001