刚才翻xnamath.h看struct XMMATRIX的用法,发现里面的数据成员用了union,于是去补了下知识……
union是一种内存共用类型,比如下面
struct st
{
int i;
double f;
};
union un
{
int i;
float f;
};
sizeof(st)的话是8,sizeof(un)是4,un里的两个变量都是用同一片内存,修改一个就会直接影响到另外一个,满足一些特殊的数据储存要求
在XMMATRIX里面就可以这样使用的
union
{
XMVECTOR r[4];
struct
{
FLOAT _11, _12, _13, _14;
FLOAT _21, _22, _23, _24;
FLOAT _31, _32, _33, _34;
FLOAT _41, _42, _43, _44;
};
FLOAT m[4][4];
};
这里的r[4],struct和m[4][4]其实就是同一片数据。好处是啥呢?就是使用时可以直接_11,_12这样访问矩阵单个数据,也可以通过r[0],r[1]这样访问矩阵的某一行,或者用二维数组的方式m[0][0]这样去使用,而不需要专门去写处理转换函数