diff options
| author | 2020-09-02 11:09:18 -0400 | |
|---|---|---|
| committer | 2020-09-02 11:09:18 -0400 | |
| commit | f64917a85222bc98cd6363a6d97b9ccb5bd54a09 (patch) | |
| tree | 24fa5a10cca1d88f97ff49b7372dfe03956c5f70 /src/common/quaternion.h | |
| parent | Merge pull request #4584 from lioncash/libusb (diff) | |
| parent | Fix orientation errors and improve drift correction (diff) | |
| download | yuzu-f64917a85222bc98cd6363a6d97b9ccb5bd54a09.tar.gz yuzu-f64917a85222bc98cd6363a6d97b9ccb5bd54a09.tar.xz yuzu-f64917a85222bc98cd6363a6d97b9ccb5bd54a09.zip | |
Merge pull request #4570 from german77/motionInput
input_common: Add a basic class for motion devices
Diffstat (limited to 'src/common/quaternion.h')
| -rw-r--r-- | src/common/quaternion.h | 30 |
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: | |||
| 36 | T length = std::sqrt(xyz.Length2() + w * w); | 36 | T length = std::sqrt(xyz.Length2() + w * w); |
| 37 | return {xyz / length, w / length}; | 37 | return {xyz / length, w / length}; |
| 38 | } | 38 | } |
| 39 | |||
| 40 | [[nodiscard]] std::array<decltype(-T{}), 16> ToMatrix() const { | ||
| 41 | const T x2 = xyz[0] * xyz[0]; | ||
| 42 | const T y2 = xyz[1] * xyz[1]; | ||
| 43 | const T z2 = xyz[2] * xyz[2]; | ||
| 44 | |||
| 45 | const T xy = xyz[0] * xyz[1]; | ||
| 46 | const T wz = w * xyz[2]; | ||
| 47 | const T xz = xyz[0] * xyz[2]; | ||
| 48 | const T wy = w * xyz[1]; | ||
| 49 | const T yz = xyz[1] * xyz[2]; | ||
| 50 | const T wx = w * xyz[0]; | ||
| 51 | |||
| 52 | return {1.0f - 2.0f * (y2 + z2), | ||
| 53 | 2.0f * (xy + wz), | ||
| 54 | 2.0f * (xz - wy), | ||
| 55 | 0.0f, | ||
| 56 | 2.0f * (xy - wz), | ||
| 57 | 1.0f - 2.0f * (x2 + z2), | ||
| 58 | 2.0f * (yz + wx), | ||
| 59 | 0.0f, | ||
| 60 | 2.0f * (xz + wy), | ||
| 61 | 2.0f * (yz - wx), | ||
| 62 | 1.0f - 2.0f * (x2 + y2), | ||
| 63 | 0.0f, | ||
| 64 | 0.0f, | ||
| 65 | 0.0f, | ||
| 66 | 0.0f, | ||
| 67 | 1.0f}; | ||
| 68 | } | ||
| 39 | }; | 69 | }; |
| 40 | 70 | ||
| 41 | template <typename T> | 71 | template <typename T> |