private void InitSkinInfo(AiMesh mesh, AssimpSceneContainer container) { var boneIDs = new uvec4[mesh.Vertexes.Length]; var boneWeights = new vec4[mesh.Vertexes.Length]; AllBoneInfos allBones = container.GetAllBoneInfos(); Dictionary <string, uint> nameIndexDict = allBones.nameIndexDict; for (int i = 0; i < mesh.BoneCount; i++) { AiBone bone = mesh.Bones[i]; // bones that influence this mesh. uint boneIndex = nameIndexDict[bone.Name]; for (int j = 0; j < bone.VertexWeightCount; j++) { AiVertexWeight vertexWeight = bone.VertexWeights[j]; uint vertexID = vertexWeight.VertexID; for (int t = 0; t < 4; t++) { if (boneWeights[vertexID][t] == 0.0f) // fill in x y z w. { boneIDs[vertexID][t] = boneIndex; boneWeights[vertexID][t] = vertexWeight.Weight; break; } } } } this.boneIDs = boneIDs; this.boneWeights = boneWeights; }
public AnimationModel(AiMesh mesh, AssimpSceneContainer container) { this.mesh = mesh; this.container = container; InitSkinInfo(mesh, container); }