|
@@ -1247,10 +1247,10 @@ namespace Assimp {
|
|
|
ai_assert(count_faces);
|
|
|
ai_assert(count_vertices);
|
|
|
|
|
|
- // mapping from output indices to DOM indexing, needed to resolve weights
|
|
|
+ // mapping from output indices to DOM indexing, needed to resolve weights or blendshapes
|
|
|
std::vector<unsigned int> reverseMapping;
|
|
|
std::map<unsigned int, unsigned int> translateIndexMap;
|
|
|
- if (process_weights) {
|
|
|
+ if (process_weights || mesh.GetBlendShapes().size() > 0) {
|
|
|
reverseMapping.resize(count_vertices);
|
|
|
}
|
|
|
|
|
@@ -1407,7 +1407,10 @@ namespace Assimp {
|
|
|
unsigned int count = 0;
|
|
|
const unsigned int* outIndices = mesh.ToOutputVertexIndex(index, count);
|
|
|
for (unsigned int k = 0; k < count; k++) {
|
|
|
- unsigned int index = translateIndexMap[outIndices[k]];
|
|
|
+ unsigned int outIndex = outIndices[k];
|
|
|
+ if (translateIndexMap.find(outIndex) == translateIndexMap.end())
|
|
|
+ continue;
|
|
|
+ unsigned int index = translateIndexMap[outIndex];
|
|
|
animMesh->mVertices[index] += vertex;
|
|
|
if (animMesh->mNormals != nullptr) {
|
|
|
animMesh->mNormals[index] += normal;
|
|
@@ -1421,6 +1424,15 @@ namespace Assimp {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ const size_t numAnimMeshes = animMeshes.size();
|
|
|
+ if (numAnimMeshes > 0) {
|
|
|
+ out_mesh->mNumAnimMeshes = static_cast<unsigned int>(numAnimMeshes);
|
|
|
+ out_mesh->mAnimMeshes = new aiAnimMesh*[numAnimMeshes];
|
|
|
+ for (size_t i = 0; i < numAnimMeshes; i++) {
|
|
|
+ out_mesh->mAnimMeshes[i] = animMeshes.at(i);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
return static_cast<unsigned int>(meshes.size() - 1);
|
|
|
}
|
|
|
|