座標計算がうまくいかないんだが、どこがまずいかな

// 変数宣言
D3DXMATRIX matTrans, matRoty, matWorld;

// XとYに0を入れて、zに速度を入れる。
D3DXMatrixTranslation(&matTrans, 0.0f,0.0f,g_myChar.speed);

// Y軸を中心に回転
D3DXMatrixRotationY(&matRoty, g_myChar.ry );

// 移動と回転を合成?
matWorld = matTrans * matRoty;

これで移動量を計算してみたんだけど、Y軸の回転が0の場合ちゃんと進行方向に進むのに、
90度(進行方向右)になると、なぜか右斜め前に進んでしまうんだ。
180度(進行方向後)になるとZ軸の移動量が0に。

パッと見でなんか間違ってるとこあるかな?