|
|
@@ -53,6 +53,57 @@ namespace glm
|
|
|
T(0), T(0), T(0), T(1));
|
|
|
}
|
|
|
|
|
|
+ template <typename T>
|
|
|
+ GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> derivedEulerAngleX
|
|
|
+ (
|
|
|
+ T const & angleX,
|
|
|
+ T const & angularVelocityX
|
|
|
+ )
|
|
|
+ {
|
|
|
+ T cosX = glm::cos(angleX) * angularVelocityX;
|
|
|
+ T sinX = glm::sin(angleX) * angularVelocityX;
|
|
|
+
|
|
|
+ return mat<4, 4, T, defaultp>(
|
|
|
+ T(0), T(0), T(0), T(0),
|
|
|
+ T(0),-sinX, cosX, T(0),
|
|
|
+ T(0),-cosX,-sinX, T(0),
|
|
|
+ T(0), T(0), T(0), T(0));
|
|
|
+ }
|
|
|
+
|
|
|
+ template <typename T>
|
|
|
+ GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> derivedEulerAngleY
|
|
|
+ (
|
|
|
+ T const & angleY,
|
|
|
+ T const & angularVelocityY
|
|
|
+ )
|
|
|
+ {
|
|
|
+ T cosY = glm::cos(angleY) * angularVelocityY;
|
|
|
+ T sinY = glm::sin(angleY) * angularVelocityY;
|
|
|
+
|
|
|
+ return mat<4, 4, T, defaultp>(
|
|
|
+ -sinY, T(0), -cosY, T(0),
|
|
|
+ T(0), T(0), T(0), T(0),
|
|
|
+ cosY, T(0), -sinY, T(0),
|
|
|
+ T(0), T(0), T(0), T(0));
|
|
|
+ }
|
|
|
+
|
|
|
+ template <typename T>
|
|
|
+ GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> derivedEulerAngleZ
|
|
|
+ (
|
|
|
+ T const & angleZ,
|
|
|
+ T const & angularVelocityZ
|
|
|
+ )
|
|
|
+ {
|
|
|
+ T cosZ = glm::cos(angleZ) * angularVelocityZ;
|
|
|
+ T sinZ = glm::sin(angleZ) * angularVelocityZ;
|
|
|
+
|
|
|
+ return mat<4, 4, T, defaultp>(
|
|
|
+ -sinZ, cosZ, T(0), T(0),
|
|
|
+ -cosZ, -sinZ, T(0), T(0),
|
|
|
+ T(0), T(0), T(0), T(0),
|
|
|
+ T(0), T(0), T(0), T(0));
|
|
|
+ }
|
|
|
+
|
|
|
template<typename T>
|
|
|
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXY
|
|
|
(
|