Я перебираю онлайн учебники по DirectX, и у меня следующая структура:
struct CUSTOMVERTEX
{
FLOAT x, y, z, rhw; // from the D3DFVF_XYZRHW flag
DWORD color; // from the D3DFVF_DIFFUSE flag
}
Мое базовое понимание DirectX приводит меня к выводу, что цвет состоит из 8-битных альфа, красного, зеленого и синего каналов.
Я пытаюсь получить доступ к этим каналам на восток. Вместо того, чтобы писать следующий код много раз (в структуре CUSTOMVERTEX):
public: int red()
{
return (color & 0x00FF0000) >> 16;
}
Я мог бы написать более элегантный вариант сочетания союза и структуры, например,
struct CUSTOMVERTEX
{
FLOAT x, y, z, rhw; // from the D3DFVF_XYZRHW flag
#pragma pack(2)
union
{
DWORD color; // from the D3DFVF_DIFFUSE flag
struct
{
char a;
char r;
char g;
char b;
};
};
}
Однако, похоже, это не работает должным образом, значения в r, g, & b выглядят почти так же, как в цвете, например. если цвет 0x12345678 a = 0x78, r = 0x56. Это проблема конечности?
И какие еще проблемы можно ожидать от этого решения? например переполнение от цвета членов?
Полагаю, я спрашиваю: есть ли лучший способ сделать это?!