netlib.narod.ru< Назад | Оглавление | Далее >

Работа с большими растрами

Последняя техника двухмерной графики, которую я собираюсь показать вам, обычно называется работа с большими растрами (big bitmap engine). Используемая в популярных играх, таких как Baldur's Gate, техника работы с большими растрами позволяет по-новому взглянуть на сферу применения двухмерной графики. В названии все сказано — большие растры. Техника использует в качестве уровней огромные растровые изображения, а значит визуальное качество карты значительно улучшается по сравнению с использованием маленьких блоков.

Из-за особенностей памяти текстур используемые для хранения уровней растры делятся на несколько файлов с изображениями. Например, размер уровня может быть 1024 × 1024 пикселя. Поскольку вас ограничивают предельные размеры текстур в Direct3D, вы должны разделить этот уровень на 16 текстур, размером 256 × 256 пикселей (упорядоченных в сетку 4 × 4). Фактически вы разделяете уровень на 16 блоков.

Поскольку для визуализации уровня вы используете блоки, перед вами открываются некоторые замечательные возможности. Например, вы можете экономить память, повторно используя блоки уровня. Возьмем, к примеру, траву; это общее изображение, которое может применяться несколько раз, и на большой картине трава будет прекрасно гармонировать с остальным изображением.

ПРИМЕЧАНИЕ
Каждый слой карты в вашем движке может иметь собственный набор блоков, которые могут произвольно масштабироваться. Например, самый нижний слой может использовать огромные блоки размером 256 × 256 пикселей, масштабируемые вдвое относительно своего исходного размера. Второй слой может использовать блоки размером 64 × 64 пикселя без масштабирования. У каждого слоя есть собственный массив карты для работы, так что самая сложная часть — гарантировать, что все они совпадут друг с другом.

Вы можете не только повторно использовать блоки, но и масштабировать их для создания еще больших уровней. Например, увеличив масштаб блоков в два раза вы в четыре раза увеличите размер уровня. А как насчет увеличения уровня в восемь или шестнадцать раз? Это все возможно, и используя несколько слоев блоков вы можете конструировать исключительно большие (и прекрасные) уровни.

Создание больших блоков

При работе с большими растрами возникает одна проблема — как разделить их на несколько текстур? Пердположим, что размер вашего уровня 1024 × 1024 пикселя; это значит, что надо разделить уровень на 16 текстур, каждая размером 256 × 256 пикселей. Поскольку Direct3D не может сделать это, придется воспользоваться помощью другой программы.

ПРИМЕЧАНИЕ
Демонстрационная версия Paint Shop Pro (PSP), замечательной программы редактирования изображений, находится на прилагаемом к книге CD-ROM в каталоге \Utils\Paint Shop Pro 8\. Используя PSP вы сможете разбить растры на небольшие удобные изображения.
Можете разделить на фрагменты свое любимое большое изображение и использовать его в примере из следующего раздела, либо откройте пример, находящийся на CD-ROM (в папке \BookCode\Chap07\Bitmap).

После того, как вы сохраните фрагменты большого растрового изображения в различных файлах, наступит время загрузить их. Для загрузки этих растровых изображений с диска и рисования их на экране вы можете использовать чрезвычайно полезный объект класса cTiles, разработанный ранее в этой главе в разделе «Построение класса для работы с блоками». Верно — не требуется никакого программирования; все уже сделано!

Поскольку теперь вы можете загрузить блоки вашего большого растра и можете использовать разработанный ранее класс cMap для хранения информации о карте, перейдем к рисованию каких-нибудь больших растров уровней.

Большой пример

Теперь, когда у вас есть набор больших блоков и набор небольших блоков, пришло время выступить во всем блеске. Фактически, механизм работы с большими растрами, который я описал и разработал для этой книги почти не отличается от механизма работы с блочной графикой, который я показал в этой главе раньше (см. раздел «Основы использования блочной графики»). Поэтому не надо поворачивать колесо вспять и снова показывать тот же самый код. Вместо этого взгляните на демонстрационную программу работы с большими растрами, находящуюся на CD-ROM. Единственное различие, которое вы заметите, заключается в том, что некоторые слои используют большие блоки.


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz