Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
 public AnimationModel(AiMesh mesh, AssimpSceneContainer container)
 {
     this.mesh      = mesh;
     this.container = container;
     InitSkinInfo(mesh, container);
 }