From 6fb9efea1fd0e4575973719a997602da4b4c4fa5 Mon Sep 17 00:00:00 2001 From: Luke Lau Date: Mon, 10 Feb 2020 02:48:03 +0000 Subject: [PATCH] Fix bone offset matrix being unnecessarily inverted --- Makefile | 2 +- model.cpp | 22 +++++++++++++--------- model.hpp | 1 - 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index 42ebf39..2225d19 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ all: bin/main -CXX_FLAGS := -g --std=c++17 +CXX_FLAGS := -g --std=c++17 -Wall bin/main: model.o material.o image.o skybox.o program.o main.cpp clang++ $(CXX_FLAGS) $^ \ diff --git a/model.cpp b/model.cpp index 107fda0..f68db4b 100644 --- a/model.cpp +++ b/model.cpp @@ -232,11 +232,11 @@ void Model::Node::draw( const std::vector &meshes, } - glm::mat4 m = parentTrans * animTrans * aiMatrixToMat4(ai.mTransformation) * model; + glm::mat4 m = parentTrans * animTrans * aiMatrixToMat4(ai.mTransformation); - for (auto child: children) { - boneTransforms[std::string(ai.mName.C_Str())] = m; - } + /* for (auto child: children) { */ + /* boneTransforms[std::string(ai.mName.C_Str())] = m; */ + /* } */ for (unsigned int i: meshIndices) { const Mesh &mesh = meshes[i]; @@ -250,13 +250,17 @@ void Model::Node::draw( const std::vector &meshes, std::string nodeName = pair.first; unsigned int boneId = pair.second.first; + // This is actually an inverse-bind matrix + // i.e. position of the mesh in bone space + // so no need to inverse again! + // https://github.com/assimp/assimp/pull/1803/files glm::mat4 boneOffset = pair.second.second; glm::mat4 boneTrans(1.f); - if (boneTransforms.count(nodeName)) { - std::cerr << "got bone transform from map" << std::endl; - boneTrans = boneTransforms[nodeName]; - } + /* if (boneTransforms.count(nodeName)) { */ + /* std::cerr << "got bone transform from map" << std::endl; */ + /* boneTrans = boneTransforms[nodeName]; */ + /* } */ for (const Animation anim: animMap->at(nodeName)) { float t = fmod(tick, anim.duration); for (const aiNodeAnim *nodeAnim: anim.nodeAnims) { @@ -266,7 +270,7 @@ void Model::Node::draw( const std::vector &meshes, } } - boneTrans = boneTrans * glm::inverse(boneOffset); + boneTrans = boneTrans * boneOffset; std::string boneLocStr = "bones[" + std::to_string(boneId) + "]"; diff --git a/model.hpp b/model.hpp index 5c74cb3..2803a7e 100644 --- a/model.hpp +++ b/model.hpp @@ -45,7 +45,6 @@ class Model { void draw(const std::vector &meshes, const std::vector &materials, const Skybox s, const float tick, glm::mat4 parentModel, BoneTransforms boneTransforms) const; const std::vector &getChildren() const { return children; } Node* findNode(const aiNode &aiNode); - glm::mat4 model = glm::mat4(1); const aiNode &ai; private: -- 2.30.2