Fix skinning edge case.
A mesh with a single (skinning) deformer which had zero clusters would erroneously register as skinned, leading GetRoodNode() to an assertion failure. Fixed.
This commit is contained in:
parent
cb76a49b82
commit
68983ad0d0
|
@ -401,12 +401,14 @@ public:
|
||||||
for (int deformerIndex = 0; deformerIndex < pMesh->GetDeformerCount(); deformerIndex++) {
|
for (int deformerIndex = 0; deformerIndex < pMesh->GetDeformerCount(); deformerIndex++) {
|
||||||
FbxSkin *skin = reinterpret_cast< FbxSkin * >( pMesh->GetDeformer(deformerIndex, FbxDeformer::eSkin));
|
FbxSkin *skin = reinterpret_cast< FbxSkin * >( pMesh->GetDeformer(deformerIndex, FbxDeformer::eSkin));
|
||||||
if (skin != nullptr) {
|
if (skin != nullptr) {
|
||||||
|
const int clusterCount = skin->GetClusterCount();
|
||||||
|
if (clusterCount == 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
int controlPointCount = pMesh->GetControlPointsCount();
|
int controlPointCount = pMesh->GetControlPointsCount();
|
||||||
|
|
||||||
vertexJointIndices.resize(controlPointCount, Vec4i(0, 0, 0, 0));
|
vertexJointIndices.resize(controlPointCount, Vec4i(0, 0, 0, 0));
|
||||||
vertexJointWeights.resize(controlPointCount, Vec4f(0.0f, 0.0f, 0.0f, 0.0f));
|
vertexJointWeights.resize(controlPointCount, Vec4f(0.0f, 0.0f, 0.0f, 0.0f));
|
||||||
|
|
||||||
const int clusterCount = skin->GetClusterCount();
|
|
||||||
for (int clusterIndex = 0; clusterIndex < clusterCount; clusterIndex++) {
|
for (int clusterIndex = 0; clusterIndex < clusterCount; clusterIndex++) {
|
||||||
FbxCluster *cluster = skin->GetCluster(clusterIndex);
|
FbxCluster *cluster = skin->GetCluster(clusterIndex);
|
||||||
const int indexCount = cluster->GetControlPointIndicesCount();
|
const int indexCount = cluster->GetControlPointIndicesCount();
|
||||||
|
|
Loading…
Reference in New Issue