summaryrefslogtreecommitdiffstats
path: root/src/common
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2020-09-02 17:09:18 +0200
committerGitHub <noreply@github.com>2020-09-02 17:09:18 +0200
commitf64917a85222bc98cd6363a6d97b9ccb5bd54a09 (patch)
tree24fa5a10cca1d88f97ff49b7372dfe03956c5f70 /src/common
parentMerge pull request #4584 from lioncash/libusb (diff)
parentFix orientation errors and improve drift correction (diff)
downloadyuzu-f64917a85222bc98cd6363a6d97b9ccb5bd54a09.tar
yuzu-f64917a85222bc98cd6363a6d97b9ccb5bd54a09.tar.gz
yuzu-f64917a85222bc98cd6363a6d97b9ccb5bd54a09.tar.bz2
yuzu-f64917a85222bc98cd6363a6d97b9ccb5bd54a09.tar.lz
yuzu-f64917a85222bc98cd6363a6d97b9ccb5bd54a09.tar.xz
yuzu-f64917a85222bc98cd6363a6d97b9ccb5bd54a09.tar.zst
yuzu-f64917a85222bc98cd6363a6d97b9ccb5bd54a09.zip
Diffstat (limited to 'src/common')
-rw-r--r--src/common/quaternion.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/common/quaternion.h b/src/common/quaternion.h
index da44f35cd..4d0871eb4 100644
--- a/src/common/quaternion.h
+++ b/src/common/quaternion.h
@@ -36,6 +36,36 @@ public:
T length = std::sqrt(xyz.Length2() + w * w);
return {xyz / length, w / length};
}
+
+ [[nodiscard]] std::array<decltype(-T{}), 16> ToMatrix() const {
+ const T x2 = xyz[0] * xyz[0];
+ const T y2 = xyz[1] * xyz[1];
+ const T z2 = xyz[2] * xyz[2];
+
+ const T xy = xyz[0] * xyz[1];
+ const T wz = w * xyz[2];
+ const T xz = xyz[0] * xyz[2];
+ const T wy = w * xyz[1];
+ const T yz = xyz[1] * xyz[2];
+ const T wx = w * xyz[0];
+
+ return {1.0f - 2.0f * (y2 + z2),
+ 2.0f * (xy + wz),
+ 2.0f * (xz - wy),
+ 0.0f,
+ 2.0f * (xy - wz),
+ 1.0f - 2.0f * (x2 + z2),
+ 2.0f * (yz + wx),
+ 0.0f,
+ 2.0f * (xz + wy),
+ 2.0f * (yz - wx),
+ 1.0f - 2.0f * (x2 + y2),
+ 0.0f,
+ 0.0f,
+ 0.0f,
+ 0.0f,
+ 1.0f};
+ }
};
template <typename T>