Assimp: Fix joints transformations

This commit is contained in:
SirLynix 2022-08-17 20:01:08 +02:00 committed by Jérôme Leclercq
parent 68d1125014
commit 3efe62ddbe
1 changed files with 6 additions and 8 deletions

View File

@ -209,8 +209,8 @@ void ProcessJoints(const Nz::MeshParams& parameters, const Nz::Matrix4f& transfo
} }
else else
{ {
joint->SetPosition(Nz::TransformPositionTRS({}, {}, parameters.vertexScale, FromAssimp(position))); joint->SetPosition(Nz::TransformPositionTRS({}, Nz::Quaternionf::Identity(), parameters.vertexScale, FromAssimp(position)));
joint->SetRotation(Nz::TransformRotationTRS(parameters.vertexRotation, parameters.vertexScale, FromAssimp(rotation))); joint->SetRotation(FromAssimp(rotation));
joint->SetScale(FromAssimp(scaling)); joint->SetScale(FromAssimp(scaling));
} }
@ -369,13 +369,13 @@ std::shared_ptr<Nz::Animation> LoadAnimation(Nz::Stream& stream, const Nz::Anima
if (jointIndex == 0) if (jointIndex == 0)
{ {
sequenceJoints[jointIndex].position = Nz::TransformPositionTRS({}, parameters.jointRotation, parameters.jointScale, interpolatedPosition); sequenceJoints[jointIndex].position = Nz::TransformPositionTRS(parameters.jointOffset, parameters.jointRotation, parameters.jointScale, interpolatedPosition);
sequenceJoints[jointIndex].rotation = Nz::TransformRotationTRS(parameters.jointRotation, parameters.jointScale, interpolatedRotation); sequenceJoints[jointIndex].rotation = Nz::TransformRotationTRS(parameters.jointRotation, parameters.jointScale, interpolatedRotation);
sequenceJoints[jointIndex].scale = Nz::TransformScaleTRS(parameters.jointScale, interpolatedScale); sequenceJoints[jointIndex].scale = Nz::TransformScaleTRS(parameters.jointScale, interpolatedScale);
} }
else else
{ {
sequenceJoints[jointIndex].position = Nz::TransformPositionTRS({}, {}, parameters.jointScale, interpolatedPosition); sequenceJoints[jointIndex].position = Nz::TransformPositionTRS({}, Nz::Quaternionf::Identity(), parameters.jointScale, interpolatedPosition);
sequenceJoints[jointIndex].rotation = interpolatedRotation; sequenceJoints[jointIndex].rotation = interpolatedRotation;
sequenceJoints[jointIndex].scale = interpolatedScale; sequenceJoints[jointIndex].scale = interpolatedScale;
} }
@ -859,10 +859,8 @@ std::shared_ptr<Nz::Mesh> LoadMesh(Nz::Stream& stream, const Nz::MeshParams& par
unsigned int jointIndex = 0; unsigned int jointIndex = 0;
std::unordered_set<const aiNode*> seenNodes; std::unordered_set<const aiNode*> seenNodes;
Nz::Matrix4f transformMatrix = Nz::Matrix4f::Transform({}, parameters.vertexRotation, parameters.vertexScale); Nz::Matrix4f transformMatrix = Nz::Matrix4f::Transform({}, Nz::Quaternionf::Identity(), parameters.vertexScale);
//Nz::Matrix4f invTransformMatrix = Nz::Matrix4f::TransformInverse(parameters.vertexOffset, parameters.vertexRotation, parameters.vertexScale); Nz::Matrix4f invTransformMatrix = Nz::Matrix4f::TransformInverse(parameters.vertexOffset, parameters.vertexRotation, parameters.vertexScale);
Nz::Matrix4f invTransformMatrix;
transformMatrix.GetInverseTransform(&invTransformMatrix);
mesh->CreateSkeletal(Nz::SafeCast<Nz::UInt32>(skeletalRoot.totalChildrenCount + 1)); mesh->CreateSkeletal(Nz::SafeCast<Nz::UInt32>(skeletalRoot.totalChildrenCount + 1));
for (auto& skeletalMesh : sceneInfo.skeletalMeshes) for (auto& skeletalMesh : sceneInfo.skeletalMeshes)