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



         

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


А поскольку две структуры содержат одинаковые члены данных, можно выполнять преобразование типов из одного в другой и обратно. Определение D3DXCOLOR выглядит так:

typedef struct D3DXCOLOR { #ifdef __cplusplus public: D3DXCOLOR() {} D3DXCOLOR(DWORD argb); D3DXCOLOR(CONST FLOAT *); D3DXCOLOR(CONST D3DXFLOAT16 *); D3DXCOLOR(CONST D3DCOLORVALUE&); D3DXCOLOR(FLOAT r, FLOAT g, FLOAT b, FLOAT a);

// приведение типов operator DWORD () const;

operator FLOAT* (); operator CONST FLOAT* () const; operator D3DCOLORVALUE* (); operator CONST D3DCOLORVALUE* () const;

operator D3DCOLORVALUE& (); operator CONST D3DCOLORVALUE& () const;

// операторы присваивания D3DXCOLOR& operator += (CONST D3DXCOLOR&); D3DXCOLOR& operator -= (CONST D3DXCOLOR&); D3DXCOLOR& operator *= (FLOAT); D3DXCOLOR& operator /= (FLOAT);

// унарные операторы D3DXCOLOR operator + () const; D3DXCOLOR operator - () const;

// бинарные операторы D3DXCOLOR operator + (CONST D3DXCOLOR&) const; D3DXCOLOR operator - (CONST D3DXCOLOR&) const; D3DXCOLOR operator * (FLOAT) const; D3DXCOLOR operator / (FLOAT) const;

friend D3DXCOLOR operator * (FLOAT, CONST D3DXCOLOR&);

BOOL operator == (CONST D3DXCOLOR&) const; BOOL operator != (CONST D3DXCOLOR&) const;

#endif //__cplusplus FLOAT r, g, b, a; } D3DXCOLOR, *LPD3DXCOLOR;

ПРИМЕЧАНИЕ

Обратите внимание, что в структурах D3DCOLORVALUE и D3DXCOLOR имеется по четыре значения с плавающей точкой. Это позволяет предствить цвет как четырехмерный вектор (r, g, b, a). Цветовые векторы могут складываться, вычитаться и масштабироваться как обычные. В то же время скалярное и векторное произведение цветовых векторов не имеют смысла. Однако, перемножение отдельных компонент для цветовых векторов имеет смысл. Так что оператор умножения цвета на цвет в классе D3DXCOLOR перемножает отдельные компоненты. Символ

означает перемножение отдельных компонентов, которое определяется следующим образом:

(c1, c2, c3, c4) 

 (k1, k2, k3, k4) = (c1k1, c2k2, c3k3, c4k4)

Мы дополним наш файл d3dUtility.h следующими глобальными цветовыми константами:

namespace d3d { . . . const D3DXCOLOR WHITE(D3DCOLOR_XRGB(255, 255, 255)); const D3DXCOLOR BLACK(D3DCOLOR_XRGB( 0, 0, 0)); const D3DXCOLOR RED(D3DCOLOR_XRGB(255, 0, 0)); const D3DXCOLOR GREEN(D3DCOLOR_XRGB( 0, 255, 0)); const D3DXCOLOR BLUE(D3DCOLOR_XRGB( 0, 0, 255)); const D3DXCOLOR YELLOW(D3DCOLOR_XRGB(255, 255, 0)); const D3DXCOLOR CYAN(D3DCOLOR_XRGB( 0, 255, 255)); const D3DXCOLOR MAGENTA(D3DCOLOR_XRGB(255, 0, 255)); }




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