在自研引擎中,我添加了旋转矩阵,原理有点多正在写。
[nodiscard]] inline constexpr Matrix Rotate(const Vector3<T>& Axis, const float Degrees) requires (M == 4 && N == 4 && CArithmetic<T>)
{
const float Radians = Degrees * (PI / 180.0f);
Matrix Result = *this;
Result[0][0] = std::cos(Radians) + (1 - std::cos(Radians)) * Axis.X * Axis.X;
Result[0][1] = (1 - std::cos(Radians)) * Axis.X * Axis.Y - std::sin(Radians) * Axis.Z;
Result[0][2] = (1 - std::cos(Radians)) * Axis.X * Axis.Z + std::sin(Radians) * Axis.Y;
Result[1][0] = (1 - std::cos(Radians)) * Axis.X * Axis.Y + std::sin(Radians) * Axis.Z;
Result[1][1] = std::cos(Radians) + (1 - std::cos(Radians)) * Axis.Y * Axis.Y;
Result[1][2] = (1 - std::cos(Radians)) * Axis.Y * Axis.Z - std::sin(Radians) * Axis.X;
Result[2][0] = (1 - std::cos(Radians)) * Axis.X * Axis.Z - std::sin(Radians) * Axis.Y;
Result[2][1] = (1 - std::cos(Radians)) * Axis.Y * Axis.Z - std::sin(Radians) * Axis.X;
Result[2][2] = std::cos(Radians) + (1 - std::cos(Radians)) * Axis.Z * Axis.Z;
return Result;
}