Введение в программирование трехмерных игр с DX9



         

-Разрядное представление цвета



Рисунок 4.1. 32-разрядное представление цвета, где для каждого основного компоненнта (красного, зеленого и синего) выделено по одному байту. Четвертый байт отведен для альфа-канала



Рисунок 4.1. 32-разрядное представление цвета


Поскольку для каждого цвета выделено по байту памяти, его интенсивность может принимать значения от 0 до 255. Чем ближе значение к 0, тем меньше интенсивность цвета, и чем ближе значение к 255 — тем больше интенсивность.

ПРИМЕЧАНИЕ

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

Если задавать каждый компонент цвета и затем помещать его в требуемую позицию значения типа D3DCOLOR, потребуется выполнить несколько поразрядных операций. Direct3D предоставляет макрос с именем D3DCOLOR_ARGB, который выполнит все эти действия за нас. У макроса есть по одному параметру для каждой цветовой составляющей и один параметр для альфа-канала. Значение каждого параметра может быть от 0 до 255, а использование макроса выглядит так:

D3DCOLOR brightRed = D3DCOLOR_ARGB(255, 255, 0, 0); D3DCOLOR someColor = D3DCOLOR_ARGB(255, 144, 87, 201);

Альтернативным способом является использование макроса D3DCOLOR_XRGB, который работает почти так же, но не получает значение для альфа-канала; вместо этого значение альфа-канала всегда устанавливается равным 0xff (255).

#define D3DCOLOR_XRGB(r,g,b) D3DCOLOR_ARGB(0xff,r,g,b)

Вторым способом хранения данных цвета в Direct3D является структура D3DCOLORVALUE. В этой структуре для задания интенсивности каждого компонента цвета применяются значения с плавающей точкой. Доступный диапазон значений от 0 до 1; 0 соответствует отсутствию даного цвета, а 1 — его максимальной интенсивности.

typedef struct _D3DCOLORVALUE { float r; // красная составляющая, диапазон 0.0-1.0 float g; // зеленая составляющая, диапазон 0.0-1.0 float b; // синяя составляющая, диапазон 0.0-1.0 float a; // альфа-составляющая, диапазон 0.0-1.0 } D3DCOLORVALUE;

Кроме того, мы можем использовать структуру D3DXCOLOR, которая содержит те же самые члены, что и D3DCOLORVALUE, но предоставляет дополнительные конструкторы и перегруженные операторы, упрощающие работу с цветами.


Содержание  Назад  Вперед