template<typename T>
T ToRadians(T degrees) {
return (degrees * (static_cast<T>(RadPi) / static_cast<T>(DegPi)));
}
void AngleMatrix(const Vector& angles)
{
float sr, sp, sy, cr, cp, cy;
DirectX::XMScalarSinCos(&sy, &cy, ToRadians(angles[1]));
DirectX::XMScalarSinCos(&sp, &cp, ToRadians(angles[0]));
DirectX::XMScalarSinCos(&sr, &cr, ToRadians(angles[2]));
m_flMatVal[0][0] = cp * cy;
m_flMatVal[1][0] = cp * sy;
m_flMatVal[2][0] = -sp;
float crcy = cr * cy;
float crsy = cr * sy;
float srcy = sr * cy;
float srsy = sr * sy;
m_flMatVal[0][1] = sp * srcy - crsy;
m_flMatVal[1][1] = sp * srsy + crcy;
m_flMatVal[2][1] = sr * cp;
m_flMatVal[0][2] = (sp * crcy + srsy);
m_flMatVal[1][2] = (sp * crsy - srcy);
m_flMatVal[2][2] = cr * cp;
m_flMatVal[0][3] = 0.0f;
m_flMatVal[1][3] = 0.0f;
m_flMatVal[2][3] = 0.0f;
}
void MatrixSetColumn(const Vector& in, int column)
{
m_flMatVal[0][column] = in.x;
m_flMatVal[1][column] = in.y;
m_flMatVal[2][column] = in.z;
}
void AngleMatrix(const Vector& angles, const Vector& position)
{
AngleMatrix(angles);
MatrixSetColumn(position, 3);
}