REVIEWED: QuaternionFromEuler() #1651

This commit is contained in:
Ray
2021-03-18 13:38:56 +01:00
parent e5834210d3
commit 2b9d81c9bc

View File

@@ -1439,21 +1439,22 @@ RMDEF void QuaternionToAxisAngle(Quaternion q, Vector3 *outAxis, float *outAngle
} }
// Returns he quaternion equivalent to Euler angles // Returns he quaternion equivalent to Euler angles
RMDEF Quaternion QuaternionFromEuler(float roll, float pitch, float yaw) // NOTE: Rotation order is ZYX
RMDEF Quaternion QuaternionFromEuler(float yaw, float pitch, float roll)
{ {
Quaternion q = { 0 }; Quaternion q = { 0 };
float x0 = cosf(roll*0.5f); float cy = cosf(yaw*0.5f);
float x1 = sinf(roll*0.5f); float sy = sinf(yaw*0.5f);
float y0 = cosf(pitch*0.5f); float cp = cosf(pitch*0.5f);
float y1 = sinf(pitch*0.5f); float sp = sinf(pitch*0.5f);
float z0 = cosf(yaw*0.5f); float cr = cosf(roll*0.5f);
float z1 = sinf(yaw*0.5f); float sr = sinf(roll*0.5f);
q.x = x1*y0*z0 - x0*y1*z1; q.x = sr*cp*cy - cr*sp*sy;
q.y = x0*y1*z0 + x1*y0*z1; q.y = cr*sp*cy + sr*cp*sy;
q.z = x0*y0*z1 - x1*y1*z0; q.z = cr*cp*sy - sr*sp*cy;
q.w = x0*y0*z0 + x1*y1*z1; q.w = cr*cp*cy + sr*sp*sy;
return q; return q;
} }