|
@@ -88,7 +88,7 @@ inline aiQuaternion::aiQuaternion( const aiMatrix3x3 &pRotMatrix)
|
|
float t = 1 + pRotMatrix.a1 + pRotMatrix.b2 + pRotMatrix.c3;
|
|
float t = 1 + pRotMatrix.a1 + pRotMatrix.b2 + pRotMatrix.c3;
|
|
|
|
|
|
// large enough
|
|
// large enough
|
|
- if( t > 0.00001f)
|
|
|
|
|
|
+ if( t > 0.001f)
|
|
{
|
|
{
|
|
float s = sqrt( t) * 2.0f;
|
|
float s = sqrt( t) * 2.0f;
|
|
x = (pRotMatrix.b3 - pRotMatrix.c2) / s;
|
|
x = (pRotMatrix.b3 - pRotMatrix.c2) / s;
|
|
@@ -98,29 +98,29 @@ inline aiQuaternion::aiQuaternion( const aiMatrix3x3 &pRotMatrix)
|
|
} // else we have to check several cases
|
|
} // else we have to check several cases
|
|
else if( pRotMatrix.a1 > pRotMatrix.b2 && pRotMatrix.a1 > pRotMatrix.c3 )
|
|
else if( pRotMatrix.a1 > pRotMatrix.b2 && pRotMatrix.a1 > pRotMatrix.c3 )
|
|
{
|
|
{
|
|
- // Column 0:
|
|
|
|
|
|
+ // Column 0:
|
|
float s = sqrt( 1.0f + pRotMatrix.a1 - pRotMatrix.b2 - pRotMatrix.c3) * 2.0f;
|
|
float s = sqrt( 1.0f + pRotMatrix.a1 - pRotMatrix.b2 - pRotMatrix.c3) * 2.0f;
|
|
- x = -0.25f * s;
|
|
|
|
|
|
+ x = 0.25f * s;
|
|
y = (pRotMatrix.a2 + pRotMatrix.b1) / s;
|
|
y = (pRotMatrix.a2 + pRotMatrix.b1) / s;
|
|
z = (pRotMatrix.c1 + pRotMatrix.a3) / s;
|
|
z = (pRotMatrix.c1 + pRotMatrix.a3) / s;
|
|
- w = (pRotMatrix.c2 - pRotMatrix.b3) / s;
|
|
|
|
|
|
+ w = (pRotMatrix.b3 - pRotMatrix.c2) / s;
|
|
}
|
|
}
|
|
else if( pRotMatrix.b2 > pRotMatrix.c3)
|
|
else if( pRotMatrix.b2 > pRotMatrix.c3)
|
|
{
|
|
{
|
|
- // Column 1:
|
|
|
|
|
|
+ // Column 1:
|
|
float s = sqrt( 1.0f + pRotMatrix.b2 - pRotMatrix.a1 - pRotMatrix.c3) * 2.0f;
|
|
float s = sqrt( 1.0f + pRotMatrix.b2 - pRotMatrix.a1 - pRotMatrix.c3) * 2.0f;
|
|
x = (pRotMatrix.a2 + pRotMatrix.b1) / s;
|
|
x = (pRotMatrix.a2 + pRotMatrix.b1) / s;
|
|
- y = -0.25f * s;
|
|
|
|
|
|
+ y = 0.25f * s;
|
|
z = (pRotMatrix.b3 + pRotMatrix.c2) / s;
|
|
z = (pRotMatrix.b3 + pRotMatrix.c2) / s;
|
|
- w = (pRotMatrix.a3 - pRotMatrix.c1) / s;
|
|
|
|
|
|
+ w = (pRotMatrix.c1 - pRotMatrix.a3) / s;
|
|
} else
|
|
} else
|
|
{
|
|
{
|
|
- // Column 2:
|
|
|
|
|
|
+ // Column 2:
|
|
float s = sqrt( 1.0f + pRotMatrix.c3 - pRotMatrix.a1 - pRotMatrix.b2) * 2.0f;
|
|
float s = sqrt( 1.0f + pRotMatrix.c3 - pRotMatrix.a1 - pRotMatrix.b2) * 2.0f;
|
|
x = (pRotMatrix.c1 + pRotMatrix.a3) / s;
|
|
x = (pRotMatrix.c1 + pRotMatrix.a3) / s;
|
|
y = (pRotMatrix.b3 + pRotMatrix.c2) / s;
|
|
y = (pRotMatrix.b3 + pRotMatrix.c2) / s;
|
|
- z = -0.25f * s;
|
|
|
|
- w = (pRotMatrix.b1 - pRotMatrix.a2) / s;
|
|
|
|
|
|
+ z = 0.25f * s;
|
|
|
|
+ w = (pRotMatrix.a2 - pRotMatrix.b1) / s;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|