public void addBone(int vertexID, int JointId, float force) { BoneVertex vertex = BoneVertexList[vertexID]; vertex.addBone(JointId, force); BoneVertexList[vertexID] = vertex; }
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); } }