|
|
@ -78,10 +78,18 @@ namespace glm |
|
|
|
if (glm::abs(s) < T(0.001)) |
|
|
|
if (glm::abs(s) < T(0.001)) |
|
|
|
s = static_cast<T>(1); |
|
|
|
s = static_cast<T>(1); |
|
|
|
T const angleCos = (m[0][0] + m[1][1] + m[2][2] - static_cast<T>(1)) * static_cast<T>(0.5); |
|
|
|
T const angleCos = (m[0][0] + m[1][1] + m[2][2] - static_cast<T>(1)) * static_cast<T>(0.5); |
|
|
|
if(abs(angleCos - static_cast<T>(1)) < epsilon) |
|
|
|
if(angleCos >= static_cast<T>(1.0)) |
|
|
|
angle = pi<T>() * static_cast<T>(0.25); |
|
|
|
{ |
|
|
|
|
|
|
|
angle = static_cast<T>(0.0); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else if (angleCos <= static_cast<T>(-1.0)) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
angle = pi<T>(); |
|
|
|
|
|
|
|
} |
|
|
|
else |
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
angle = acos(angleCos); |
|
|
|
angle = acos(angleCos); |
|
|
|
|
|
|
|
} |
|
|
|
axis.x = (m[1][2] - m[2][1]) / s; |
|
|
|
axis.x = (m[1][2] - m[2][1]) / s; |
|
|
|
axis.y = (m[2][0] - m[0][2]) / s; |
|
|
|
axis.y = (m[2][0] - m[0][2]) / s; |
|
|
|
axis.z = (m[0][1] - m[1][0]) / s; |
|
|
|
axis.z = (m[0][1] - m[1][0]) / s; |
|
|
|