我正在在线浏览一组 DirectX 教程,我有以下结构:
struct CUSTOMVERTEX
{
FLOAT x, y, z, rhw; // from the D3DFVF_XYZRHW flag
DWORD color; // from the D3DFVF_DIFFUSE flag
}
我对 directX 的基本理解使我发现颜色由 8 位 alpha、红色、绿色和蓝色通道组成。
我正在尝试向东访问这些频道。而不是多次编写以下代码(在 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。这是一个endieness问题吗?
我还可以从这个解决方案中期待什么其他问题?例如从颜色成员溢出?
我想我要问的是......有没有更好的方法来做到这一点?!