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

Direct3DRMTexture: интерфейс текстуры

В Direct3D текстуры могут быть назначены для грани и сетки, либо добавлены непосредственно к сцене, как фоновое изображение или декал (decal). Текстуры могут быть загружены из файлов BMP, файлов PPM, из ресурсов программы или из памяти. Представляются текстуры интерфейсом Direct3DRMTexture.

Создание текстур

Простейший способ создания текстуры — использование функции LoadTexture() интерфейса Direct3DRM:

  LPDIRECT3DRM texture;
  d3drm->LoadTexture("texture.bmp", &texture);

Функция LoadTexture() получает в качестве аргумента имя файла BMP или PPM и использует растровое изображение из файла для создания текстуры.

Также текстуры могут быть загружены из ресурсов программы с помощью функции LoadTextureFromResource(), как показано в следующем примере:

  LPDIRECT3DRMTEXTURE texture;
  HRSRC id = FindResource(NULL, MAKEINTRESOURCE(IDR_SAMPLETEXTURE),
      "TEXTURE");
  d3drm->LoadTextureFromResource(id, &texture);

Функция LoadTextureFromResource() интерфейса Direct3DRM получает в качестве параметра идентификатор ресурса и создает текстуру из ресурса, определяемого значением переменной id.

Для внутреннего представления текстур в Direct3D применяются поверхности DirectDraw. Функция LoadTextureFromSurface() позволяет использовать в качестве текстуры существующую поверхность DirectDraw.

Цвета текстуры

После создания экземпляра интерфейса Direct3DRMTexture можно вызывать функции GetColors() и SetColors() для управления количеством цветов, используемых Direct3D для представления текстуры. Посредством функций GetShades() и SetShades() можно осуществлять более точный контроль процесса визуализации текстуры.

Количество цветов текстуры (контролируемое посредством функций GetColors() и SetColors()) определяет число цветов, присутствующих на самой текстуре. Функции GetShades() и SetShades() позволяют контролировать, сколько оттенков будет использовано для представления каждого из цветов текстуры. Например, для двухцветной текстуры функция GetColors() возвратит значение 2, а функция GetShades() возвратит значение 16 (поскольку 16 — это используемое по умолчанию количество оттенков). В этом примере каждый из двух цветов текстуры будет представляться шестнадцатью различными оттенками.

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

Декалы

Декал (decal) — это текстура, добавляемая к сцене без присоединения к грани или сетке. Декалы визуализируются в сцене в соответствии с их местоположением, благодаря чему они увеличиваются или уменьшаются в зависимости от расстояния до зрителя. Декалы также подчиняются правилам скрытия невидимых поверхностей. Если декал находится позади объекта, он закрывается этим объектом.

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

Несмотря на указанный недостаток, декалы полезны при визуализации двумерных объектов сцены. Эффекты, реализация которых посредством сеток и граней оказывается слишком ресурсоемкой (например, взрывы) часто могут быть эффективно реализованы с применением декалов.

Интерфейс Direct3DRMTexture предоставляет ряд функций для работы с декалами:

Большинство этих функций используются только с декалами. Однако функции прозрачности применяются для управления прозрачностью и декалов и текстур, присоединенных к сеткам и граням.


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

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