}
//----------------------------------------
- // For the skin
+ // Initialize variables for the skin
+ bool createSkin = false;
+ for (unsigned int idx_mesh = 0; idx_mesh < mScene->mNumMeshes; ++idx_mesh) {
+ const aiMesh* aim = mScene->mMeshes[idx_mesh];
+ if(aim->HasBones()) {
+ createSkin = true;
+ break;
+ }
+ }
+
+ Ref<Skin> skinRef;
std::string skinName = mAsset->FindUniqueID("skin", "skin");
- Ref<Skin> skinRef = mAsset->skins.Create(skinName);
- skinRef->name = skinName;
- // std::vector<glTF::mat4> inverseBindMatricesData;
std::vector<aiMatrix4x4> inverseBindMatricesData;
-
- // Identity Matrix =====> skinRef->bindShapeMatrix
- // Temporary. Hard-coded identity matrix here
- skinRef->bindShapeMatrix.isPresent = true;
- IdentityMatrix4(skinRef->bindShapeMatrix.value);
+ if(createSkin) {
+ skinRef = mAsset->skins.Create(skinName);
+ skinRef->name = skinName;
+ }
//----------------------------------------
for (unsigned int idx_mesh = 0; idx_mesh < mScene->mNumMeshes; ++idx_mesh) {
//----------------------------------------
// Finish the skin
// Create the Accessor for skinRef->inverseBindMatrices
- mat4* invBindMatrixData = new mat4[inverseBindMatricesData.size()];
- for (int idx_joint = 0; idx_joint < inverseBindMatricesData.size(); ++idx_joint) {
- CopyValue(inverseBindMatricesData[idx_joint], invBindMatrixData[idx_joint]);
- }
+ if (createSkin) {
+ mat4* invBindMatrixData = new mat4[inverseBindMatricesData.size()];
+ for (int idx_joint = 0; idx_joint < inverseBindMatricesData.size(); ++idx_joint) {
+ CopyValue(inverseBindMatricesData[idx_joint], invBindMatrixData[idx_joint]);
+ }
- Ref<Accessor> invBindMatrixAccessor = ExportData(*mAsset, skinName, b, inverseBindMatricesData.size(), invBindMatrixData, AttribType::MAT4, AttribType::MAT4, ComponentType_FLOAT);
- if (invBindMatrixAccessor) skinRef->inverseBindMatrices = invBindMatrixAccessor;
+ Ref<Accessor> invBindMatrixAccessor = ExportData(*mAsset, skinName, b, inverseBindMatricesData.size(), invBindMatrixData, AttribType::MAT4, AttribType::MAT4, ComponentType_FLOAT);
+ if (invBindMatrixAccessor) skinRef->inverseBindMatrices = invBindMatrixAccessor;
- // Find node that contains this mesh and add "skeletons" and "skin" attributes to that node.
- Ref<Node> rootNode = mAsset->nodes.Get(unsigned(0));
- Ref<Node> meshNode;
- std::string meshID = mAsset->meshes.Get(unsigned(0))->id;
- FindMeshNode(rootNode, meshNode, meshID);
+ // Identity Matrix =====> skinRef->bindShapeMatrix
+ // Temporary. Hard-coded identity matrix here
+ skinRef->bindShapeMatrix.isPresent = true;
+ IdentityMatrix4(skinRef->bindShapeMatrix.value);
- Ref<Node> rootJoint = FindSkeletonRootJoint(skinRef);
- meshNode->skeletons.push_back(rootJoint);
- meshNode->skin = skinRef;
- //----------------------------------------
+ // Find node that contains this mesh and add "skeletons" and "skin" attributes to that node.
+ Ref<Node> rootNode = mAsset->nodes.Get(unsigned(0));
+ Ref<Node> meshNode;
+ std::string meshID = mAsset->meshes.Get(unsigned(0))->id;
+ FindMeshNode(rootNode, meshNode, meshID);
+
+ Ref<Node> rootJoint = FindSkeletonRootJoint(skinRef);
+ meshNode->skeletons.push_back(rootJoint);
+ meshNode->skin = skinRef;
+ }
}
/*