- 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-9d2fd5bffc1fpull/3/merge
parent
3aad6f8b6d
commit
a73397198c
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue