- Bugfix #3457587: correct decomposition of matrices with negative scaling. Thanks to anonymous google account user for the fix.

git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@1099 67173fc5-114c-0410-ac8e-9d2fd5bffc1f
pull/3/merge
ulfjorensen 2011-12-12 08:44:48 +00:00
parent 3aad6f8b6d
commit a73397198c
2 changed files with 9 additions and 1 deletions

View File

@ -1084,8 +1084,9 @@ void ColladaLoader::CreateAnimation( aiScene* pScene, const ColladaParser& pPars
for( size_t a = 0; a < resultTrafos.size(); ++a)
{
const aiMatrix4x4& mat = resultTrafos[a];
aiMatrix4x4 mat = resultTrafos[a];
double time = double( mat.d4); // remember? time is stored in mat.d4
mat.d4 = 1.0f;
dstAnim->mPositionKeys[a].mTime = time;
dstAnim->mRotationKeys[a].mTime = time;

View File

@ -217,6 +217,13 @@ inline void aiMatrix4x4::Decompose (aiVector3D& scaling, aiQuaternion& rotation,
scaling.y = vRows[1].Length();
scaling.z = vRows[2].Length();
// and the sign of the scaling
if (Determinant() < 0) {
scaling.x = -scaling.x;
scaling.y = -scaling.y;
scaling.z = -scaling.z;
}
// and remove all scaling from the matrix
if(scaling.x)
{