| 819 | return true; |
| 820 | } |
| 821 | bool Bundle3D::loadNodes(NodeDatas& nodedatas) |
| 822 | { |
| 823 | if (_version == "0.1" || _version == "1.2" || _version == "0.2") |
| 824 | { |
| 825 | SkinData skinData; |
| 826 | if (!loadSkinData("", &skinData)) |
| 827 | { |
| 828 | auto node = new NodeData(); |
| 829 | auto modelnode = new ModelData(); |
| 830 | modelnode->materialId = ""; |
| 831 | modelnode->subMeshId = ""; |
| 832 | node->modelNodeDatas.emplace_back(modelnode); |
| 833 | nodedatas.nodes.emplace_back(node); |
| 834 | return true; |
| 835 | } |
| 836 | |
| 837 | auto nodeDatas = new NodeData*[skinData.skinBoneNames.size() + skinData.nodeBoneNames.size()]; |
| 838 | int index = 0; |
| 839 | size_t i; |
| 840 | auto skinBoneSize = skinData.skinBoneNames.size(); |
| 841 | auto nodeBoneSize = skinData.nodeBoneNames.size(); |
| 842 | for (i = 0; i < skinBoneSize; ++i) |
| 843 | { |
| 844 | nodeDatas[index] = new NodeData(); |
| 845 | nodeDatas[index]->id = skinData.skinBoneNames[i]; |
| 846 | nodeDatas[index]->transform = skinData.skinBoneOriginMatrices[i]; |
| 847 | ++index; |
| 848 | } |
| 849 | for (i = 0; i < nodeBoneSize; ++i) |
| 850 | { |
| 851 | nodeDatas[index] = new NodeData(); |
| 852 | nodeDatas[index]->id = skinData.nodeBoneNames[i]; |
| 853 | nodeDatas[index]->transform = skinData.nodeBoneOriginMatrices[i]; |
| 854 | ++index; |
| 855 | } |
| 856 | for (const auto& it : skinData.boneChild) |
| 857 | { |
| 858 | const auto& children = it.second; |
| 859 | auto parent = nodeDatas[it.first]; |
| 860 | for (const auto& child : children) |
| 861 | { |
| 862 | parent->children.emplace_back(nodeDatas[child]); |
| 863 | } |
| 864 | } |
| 865 | nodedatas.skeleton.emplace_back(nodeDatas[skinData.rootBoneIndex]); |
| 866 | auto node = new NodeData(); |
| 867 | auto modelnode = new ModelData(); |
| 868 | modelnode->materialId = ""; |
| 869 | modelnode->subMeshId = ""; |
| 870 | modelnode->bones = skinData.skinBoneNames; |
| 871 | modelnode->invBindPose = skinData.inverseBindPoseMatrices; |
| 872 | node->modelNodeDatas.emplace_back(modelnode); |
| 873 | nodedatas.nodes.emplace_back(node); |
| 874 | delete[] nodeDatas; |
| 875 | } |
| 876 | else |
| 877 | { |
| 878 | if (_isBinary) |
no test coverage detected