DirectXで行列を扱う場合はXMMATRIX型を使う。
XMMATRIX m;
何もしない行列のことを単位行列という。
XMMATRIX m;
m = XMMatrixIdentity();
これで、変数mは何もしない行列になる。つまり行列の初期化。
平行移動させる行列は、次のように作る。
XMMATRIX m;
m = XMMatrixTranslation(2, 3, 4);
これで、変数mは右に2、上に3、奥に4移動させる行列になる。
回転させる行列は、回転軸によって3種類の作り方(関数)がある
XMMATRIX mX, mY, mZ;
mX = XMMatrixRotationX(XMConvertToRadians(45)); //X軸で45°回転させる行列
mY = XMMatrixRotationY(XMConvertToRadians(90)); //Y軸で90°回転させる行列
mZ = XMMatrixRotationZ(XMConvertToRadians(30)); //Z軸で30°回転させる行列
基本的に角度はラジアンで指定する。
上の例のようにXMConvertToRadiansを使えば度(Degree)で指定することもできる。
拡大縮小(スケール)させる行列は、次のように作る。
XMMATRIX m;
m = XMMatrixScaling (2.0f, 0.5f, 1.0f);
これで、変数mは横に2倍、縦に半分、前後はそのままの行列になる。
行列mの逆行列を求めたい場合は
XMMATRIX inv;
inv = XMMatrixInverse(nullptr, m);
例えばベクトルvをY軸で30度回転させたい場合は、行列を使って次のように書く。
XMVECTOR v = XMVectorSet(2, 0, 0, 0); //とあるベクトル
XMMATRIX m = XMMatrixRotationY(XMConvertToRadians(30)); //Y軸で30度回転させる行列
v = XMVector3TransformCoord(v, m); //ベクトルvを行列mで変形