From d8c2295962cf2fa871aae4f7a1ebb96a6698d6b6 Mon Sep 17 00:00:00 2001 From: aramis_acg Date: Tue, 17 Jul 2012 22:18:10 +0000 Subject: [PATCH] =?UTF-8?q?-=20blend:=20compute=20parent=20inverses=20on?= =?UTF-8?q?=20your=20own=20instead=20of=20trusting=20the=20blend=20input.?= =?UTF-8?q?=20Thanks=20to=20Kalm=C3=A1r=20D=C3=A1niel=20for=20the=20patch.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@1291 67173fc5-114c-0410-ac8e-9d2fd5bffc1f --- code/BlenderLoader.cpp | 16 ++++++---------- code/BlenderLoader.h | 3 ++- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/code/BlenderLoader.cpp b/code/BlenderLoader.cpp index fa9ca6e70..c175c719f 100644 --- a/code/BlenderLoader.cpp +++ b/code/BlenderLoader.cpp @@ -360,7 +360,7 @@ void BlenderImporter::ConvertBlendFile(aiScene* out, const Scene& in,const FileD root->mNumChildren = static_cast(no_parents.size()); root->mChildren = new aiNode*[root->mNumChildren](); for (unsigned int i = 0; i < root->mNumChildren; ++i) { - root->mChildren[i] = ConvertNode(in, no_parents[i], conv); + root->mChildren[i] = ConvertNode(in, no_parents[i], conv, aiMatrix4x4()); root->mChildren[i]->mParent = root; } @@ -882,7 +882,7 @@ aiLight* BlenderImporter::ConvertLight(const Scene& /*in*/, const Object* /*obj* } // ------------------------------------------------------------------------------------------------ -aiNode* BlenderImporter::ConvertNode(const Scene& in, const Object* obj, ConversionData& conv_data) +aiNode* BlenderImporter::ConvertNode(const Scene& in, const Object* obj, ConversionData& conv_data, const aiMatrix4x4& parentTransform) { std::deque children; for(std::set::iterator it = conv_data.objects.begin(); it != conv_data.objects.end() ;) { @@ -966,16 +966,12 @@ aiNode* BlenderImporter::ConvertNode(const Scene& in, const Object* obj, Convers for(unsigned int x = 0; x < 4; ++x) { for(unsigned int y = 0; y < 4; ++y) { - node->mTransformation[y][x] = obj->parentinv[x][y]; + node->mTransformation[y][x] = obj->obmat[x][y]; } } - aiMatrix4x4 m; - for(unsigned int x = 0; x < 4; ++x) { - for(unsigned int y = 0; y < 4; ++y) { - m[y][x] = obj->obmat[x][y]; - } - } + aiMatrix4x4 m = parentTransform; + m = m.Inverse(); node->mTransformation = m*node->mTransformation; @@ -983,7 +979,7 @@ aiNode* BlenderImporter::ConvertNode(const Scene& in, const Object* obj, Convers node->mNumChildren = static_cast(children.size()); aiNode** nd = node->mChildren = new aiNode*[node->mNumChildren](); for_each (const Object* nobj,children) { - *nd = ConvertNode(in,nobj,conv_data); + *nd = ConvertNode(in,nobj,conv_data,node->mTransformation * parentTransform); (*nd++)->mParent = node; } } diff --git a/code/BlenderLoader.h b/code/BlenderLoader.h index f2109f663..4b44d2c7d 100644 --- a/code/BlenderLoader.h +++ b/code/BlenderLoader.h @@ -145,7 +145,8 @@ private: // -------------------- aiNode* ConvertNode(const Blender::Scene& in, const Blender::Object* obj, - Blender::ConversionData& conv_info + Blender::ConversionData& conv_info, + const aiMatrix4x4& parentTransform ); // --------------------