Яндекс.Метрика

Этот раздел посвящён программированию с использованием dxsprite, который создавался специально для работы с двухменрной графикой.


Инициализация dxsprite: Это первое, чему мы должны научиться. Для простоты я использовал структурное программирование. В примере присутствует только то, что необходимо для инициализации dxsprite.

21.01.06     ZERO     обсолютный ноль


Интерфэйс ID3DXSprite: Это то чем должен был быть DirectDraw. Он превосходит его в простоте, а по возможностям оставляет далеко позади. Единственное его ограничение - двухмерность.

Для освоения интерфэйса необходимо усвоить возможные размеры создаваемой им текстуры. Надо запомнить цифры: 8, 16, 32, 64, 128, 256, 512, 1024 и т.д. Текстура создается в виде квадрата или прямоугольника с длиной сторон выше приведенных размеров. Например: 64х64; 64x128; 64x256; 64x512; 64x1024. Это важно знать, т.к. воизбежании искажений создаваемые вами растры должны быть тех же размеров, что и текстуры.

Даже если размер растра будет отличаться на один пиксел, например: 64x65 - то интерфэйс создаст текстуру 64x128 и конечно же растянет ваш рисунок до своих размеров.

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

Ниже я привожу примеры показывающие возможности текстуры, исходники идентичны.

Примечание: проэкты использующие интерфэйс я архивирую без исполняемых файлов, т.к. даже в этом примере он весит 0.38 мегабайта, исходник же всего 22 kb.

21.01.06    sprite              текстура без искажений

21.01.06    sprite_mask    текстура с маской

21.01.06    sprite_alpha    текстура с прозрачностью


Трансформации: увеличивающие возможности графики.

21.01.06    sprite_mirror    зеркальное отражение

21.01.06    sprite_scale     масштабирование

21.01.06    sprite_rotate    поворот

21.01.06    sprite_color     мультипликация цвета


PhotoshopCS: с его помощью можно создать растры других форматов или же попросту конвертировать один формат в другой с сохранением альфаканала.

Функция библиотеки D3DX может загружать в текстуру множества форматов, но нас интересуют только три: dib(bmp), png, tga.

22.01.06    sprite_tga    загрузка dib(bmp), png, tga.


Прямой доступ к поверхности: Для некоторых нужд, например для сохранения скриншота, мы должны уметь получать адресс поверхности. Интерефэйс D3DX дает нам такую возможность. Для этого нужно просто заблокировать поверхность. Если мы хотим заблокировать вторичный буфер, то обязательно надо объявить интерфэйсу о разрешении блокирования буфера при инициализации.

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

Для сохранения скриншота можно применить функцию D3DXSaveSurfaceToFile. Также есть функция D3DXSaveTextureToFile которая сохраняет в файл текстуру.

24.01.06    surface    прямой доступ к поверхности


Создание пустой текстуры: Для создания своего загрузчика текстур нужна сама текстура, в которую можно будет загружать графические данные.

26.01.06    texture    создание текстуры