add Rotate function
This commit is contained in:
@@ -131,5 +131,7 @@ Mat4f RotateZ(float angle);
|
||||
|
||||
Mat4f Rotate(const Vec3f& angles);
|
||||
|
||||
Mat4f Rotate(float angle, Vec3f axis);
|
||||
|
||||
} // namespace maths
|
||||
} // namespace blitz
|
||||
|
||||
@@ -133,5 +133,31 @@ Mat4f Rotate(const Vec3f& angle) {
|
||||
return maths::Dot(maths::Dot(RotateX(angle.x), RotateY(angle.y)), RotateZ(angle.z));
|
||||
}
|
||||
|
||||
Mat4f Rotate(float angle, Vec3f axis) {
|
||||
Mat4f mat{};
|
||||
axis = Normalize(axis);
|
||||
|
||||
float cosine = std::cos(angle);
|
||||
float sine = std::sin(angle);
|
||||
|
||||
float oneminuscos = (1.0f - cosine);
|
||||
|
||||
mat.at(0, 0) = cosine + axis.x * axis.x * oneminuscos;
|
||||
mat.at(0, 1) = axis.x * axis.y * oneminuscos - axis.z * sine;
|
||||
mat.at(0, 2) = axis.x * axis.z * oneminuscos + axis.y * sine;
|
||||
|
||||
mat.at(1, 0) = axis.x * axis.y * oneminuscos + axis.z * sine;
|
||||
mat.at(1, 1) = cosine + axis.y * axis.y * oneminuscos;
|
||||
mat.at(1, 2) = axis.y * axis.z * oneminuscos - axis.x * sine;
|
||||
|
||||
mat.at(2, 0) = axis.x * axis.z * oneminuscos - axis.y * sine;
|
||||
mat.at(2, 1) = axis.y * axis.z * oneminuscos + axis.x * sine;
|
||||
mat.at(2, 2) = cosine + axis.z * axis.z * oneminuscos;
|
||||
|
||||
mat.at(3, 3) = 1.0f;
|
||||
|
||||
return mat;
|
||||
}
|
||||
|
||||
} // namespace maths
|
||||
} // namespace blitz
|
||||
|
||||
Reference in New Issue
Block a user