Esempio n. 1
0
        public void addBone(int vertexID, int JointId, float force)
        {
            BoneVertex vertex = BoneVertexList[vertexID];

            vertex.addBone(JointId, force);
            BoneVertexList[vertexID] = vertex;
        }
Esempio n. 2
0
        public void BuilSkin()
        {
            for (int i = 0; i < BoneVertexList.Count; i++)
            {
                BoneVertex vertex = BoneVertexList[i];
                var        wight  = new BoneWeight();
                float      len    = 0;


                var orderdWeights = vertex.bones.OrderByDescending(t => t.Weight).ToList();
                switch (orderdWeights.Count)
                {
                case 0:

                    break;

                case 1:


                    wight.boneIndex0 = orderdWeights[0].BoneIndex;
                    wight.weight0    = orderdWeights[0].Weight;

                    break;

                case 2:

                    wight.boneIndex0 = orderdWeights[0].BoneIndex;

                    wight.boneIndex1 = orderdWeights[1].BoneIndex;

                    len = Mathf.Sqrt(orderdWeights[0].Weight * orderdWeights[0].Weight +
                                     orderdWeights[1].Weight * orderdWeights[1].Weight);
                    wight.weight0 = orderdWeights[0].Weight / len;
                    wight.weight1 = orderdWeights[1].Weight / len;
                    break;

                case 3:

                    wight.boneIndex0 = orderdWeights[0].BoneIndex;
                    wight.boneIndex1 = orderdWeights[1].BoneIndex;
                    wight.boneIndex2 = orderdWeights[2].BoneIndex;

                    len = Mathf.Sqrt(orderdWeights[0].Weight * orderdWeights[0].Weight +
                                     orderdWeights[1].Weight * orderdWeights[1].Weight +
                                     orderdWeights[2].Weight * orderdWeights[2].Weight);
                    wight.weight0 = orderdWeights[0].Weight / len;
                    wight.weight1 = orderdWeights[1].Weight / len;
                    wight.weight2 = orderdWeights[2].Weight / len;

                    break;

                default:

                    wight.boneIndex0 = orderdWeights[0].BoneIndex;
                    wight.boneIndex1 = orderdWeights[1].BoneIndex;
                    wight.boneIndex2 = orderdWeights[2].BoneIndex;
                    wight.boneIndex3 = orderdWeights[3].BoneIndex;

                    len = Mathf.Sqrt(orderdWeights[0].Weight * orderdWeights[0].Weight +
                                     orderdWeights[1].Weight * orderdWeights[1].Weight +
                                     orderdWeights[2].Weight * orderdWeights[2].Weight +
                                     orderdWeights[3].Weight * orderdWeights[3].Weight);
                    wight.weight0 = orderdWeights[0].Weight / len;
                    wight.weight1 = orderdWeights[1].Weight / len;
                    wight.weight2 = orderdWeights[2].Weight / len;
                    wight.weight3 = orderdWeights[3].Weight / len;

                    break;
                }
                maxBones = Math.Max(maxBones, vertex.numbones);

                trace("----------");
                trace(" ");
                trace(string.Format(" vertex:{0} num Bones:{1} force {2}", i, vertex.numbones, len));

                trace(string.Format(" bone index :{0}  w:{1}", wight.boneIndex0, wight.weight0));
                trace(string.Format(" bone index :{0}  w:{1}", wight.boneIndex1, wight.weight1));
                trace(string.Format(" bone index :{0}  w:{1}", wight.boneIndex2, wight.weight2));
                trace(string.Format(" bone index :{0}  w:{1}", wight.boneIndex3, wight.weight3));

                boneWeightsList.Add(wight);
            }
        }