summaryrefslogtreecommitdiff
path: root/Source/Core/Common/Matrix.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/Common/Matrix.cpp')
-rw-r--r--Source/Core/Common/Matrix.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/Source/Core/Common/Matrix.cpp b/Source/Core/Common/Matrix.cpp
index 7efac12f78..9581a5a4ce 100644
--- a/Source/Core/Common/Matrix.cpp
+++ b/Source/Core/Common/Matrix.cpp
@@ -84,6 +84,23 @@ Matrix33 Matrix33::RotateZ(float rad)
return mtx;
}
+Matrix33 Matrix33::Rotate(float rad, const Vec3& axis)
+{
+ const float s = std::sin(rad);
+ const float c = std::cos(rad);
+ Matrix33 mtx;
+ mtx.data[0] = axis.x * axis.x * (1 - c) + c;
+ mtx.data[1] = axis.x * axis.y * (1 - c) - axis.z * s;
+ mtx.data[2] = axis.x * axis.z * (1 - c) + axis.y * s;
+ mtx.data[3] = axis.y * axis.x * (1 - c) + axis.z * s;
+ mtx.data[4] = axis.y * axis.y * (1 - c) + c;
+ mtx.data[5] = axis.y * axis.z * (1 - c) - axis.x * s;
+ mtx.data[6] = axis.z * axis.x * (1 - c) - axis.y * s;
+ mtx.data[7] = axis.z * axis.y * (1 - c) + axis.x * s;
+ mtx.data[8] = axis.z * axis.z * (1 - c) + c;
+ return mtx;
+}
+
Matrix33 Matrix33::Scale(const Vec3& vec)
{
Matrix33 mtx = {};