Тип данных для работы с матрицами объявлен в файле d3d9types.h как объединение, синтаксис которого приведен ниже:
typedef struct _D3DMATRIX { union {
struct
{
float _11. _12. _13. _14;
float _21. _22. _23. _24;
float _31. J2. _33. _34;
float _41, _42. _43. _44:
}:
float m[4][4]; }:
} D3DMATRIX;
При формировании матрицы к ее элементам можно обращаться, как к полям структуры или как к элементам массива т. Поэтому следующие два оператора занеПреобразования в пространстве сут число 1800 в элемент матрицы на пересечении второго столбца и четвертой строки: Т_42 - 1800: Т.т[3][1] - 1800: Единичную матрицу можно объявить следующим образом:
D3DMATRIX Т1 -
{
l.Of. 0.0f. 0.0f. 0.0f. O.Of. l.Of. O.Of. O.Of. O.Of. O.Of. l.Of. O.Of. O.Of. O.Of. O.Of. l.Of
В более ранних версиях библиотеки тип данных D3DMATRIX определялся при помощи условной компиляции. Если до включения заголовочных файлов в программе объявлялась константа #def i ne D3D_0VERL0ADS, то тип D3DMATRIX объявлялся как класс, методы которого реализуют математические операции с матрицами. В данной версии в файле d3dx9math.h объявлен отдельный класс, код которого приведен в листинге 24.1.
Листинг 24.1
typedef struct D3DXMATRIX: public D3DMATRIX {
public:
D3DXMATRIXO {}; D3DXMATRIXC CONST FLOAT * ); D3DXMATRIXC CONST D3DMATRIX& ); D3DXMATRIXC CONST D3DXFL0AT16 * ); D3DXMATRIXC FLOAT _11, FLOAT _12. FLOAT _13
FLOAT _21. FLOAT _22. FLOAT _23
FLOAT _31, FLOAT _32. FLOAT _33
FLOAT _41, FLOAT _42. FLOAT _43
} D3DXMATRIX. *LPD3DXMATRIX;
Этот класс наследует поля матрицы D3DMATRIX и содержит конструкторы и перегруженные операторы для выполнения матричных операций. В этом случае матрицу надо инициализировать одним из конструкторов. Например, объявление единичной матрицы может иметь следующий вид:
D3DXMATRIX WX-D3DXMATRIX(1.0.0.0.0.1.0.0.0.0.1.0.0.0.0.D:
Исходный текст реализации методов класса находится в файле d3dx9math.ini. В этом же файле даны шаблоны глобальных функций умножения матриц, занесения в матрицу единичной матрицы и других операций, необходимых для реализации методов данного класса. Для их применения надо в списке компоновщика указать библиотеку d3dx9.lib.