public MorphVertex(Vector3 vertex, List <int> vertexIndexs) { Vertex = vertex; VertexIndexs = vertexIndexs; VertexBoneWeight = new MorphBoneWeight(); }
private void ApplyRange() { _currentCheckedMorphBone.InternalRangeVertexs.Clear(); _currentCheckedMorphBone.ExternalRangeVertexs.Clear(); _currentCheckedMorphBone.ErrorVertexs.Clear(); for (int i = 0; i < _morphAnimation.Vertexs.Count; i++) { float distance = Vector3.Distance(_morphAnimation.Vertexs[i].Vertex, _currentCheckedBone.position); if (distance < _currentCheckedMorphBone.InternalRange) { MorphBoneWeight mbw = _morphAnimation.Vertexs[i].VertexBoneWeight; mbw.bone0 = _currentCheckedBone; mbw.bone1 = _currentCheckedBone; mbw.bone2 = _currentCheckedBone; mbw.bone3 = _currentCheckedBone; mbw.weight0 = 1; mbw.weight1 = 0; mbw.weight2 = 0; mbw.weight3 = 0; _currentCheckedMorphBone.InternalRangeVertexs.Add(_morphAnimation.Vertexs[i]); } else if (distance >= _currentCheckedMorphBone.InternalRange && distance < _currentCheckedMorphBone.ExternalRange) { MorphBoneWeight mbw = _morphAnimation.Vertexs[i].VertexBoneWeight; if (mbw.bone0 == _currentCheckedBone) { mbw.bone0 = _currentCheckedBone; mbw.weight0 = 1 - distance / _currentCheckedMorphBone.ExternalRange; mbw.AstrictWeights(); _currentCheckedMorphBone.ExternalRangeVertexs.Add(_morphAnimation.Vertexs[i]); } else if (mbw.bone1 == _currentCheckedBone) { mbw.bone1 = _currentCheckedBone; mbw.weight1 = 1 - distance / _currentCheckedMorphBone.ExternalRange; mbw.AstrictWeights(); _currentCheckedMorphBone.ExternalRangeVertexs.Add(_morphAnimation.Vertexs[i]); } else if (mbw.bone2 == _currentCheckedBone) { mbw.bone2 = _currentCheckedBone; mbw.weight2 = 1 - distance / _currentCheckedMorphBone.ExternalRange; mbw.AstrictWeights(); _currentCheckedMorphBone.ExternalRangeVertexs.Add(_morphAnimation.Vertexs[i]); } else if (mbw.bone3 == _currentCheckedBone) { mbw.bone3 = _currentCheckedBone; mbw.weight3 = 1 - distance / _currentCheckedMorphBone.ExternalRange; mbw.AstrictWeights(); _currentCheckedMorphBone.ExternalRangeVertexs.Add(_morphAnimation.Vertexs[i]); } else if (!mbw.bone0) { mbw.bone0 = _currentCheckedBone; mbw.weight0 = 1 - distance / _currentCheckedMorphBone.ExternalRange; mbw.AstrictWeights(); _currentCheckedMorphBone.ExternalRangeVertexs.Add(_morphAnimation.Vertexs[i]); } else if (!mbw.bone1) { mbw.bone1 = _currentCheckedBone; mbw.weight1 = 1 - distance / _currentCheckedMorphBone.ExternalRange; mbw.AstrictWeights(); _currentCheckedMorphBone.ExternalRangeVertexs.Add(_morphAnimation.Vertexs[i]); } else if (!mbw.bone2) { mbw.bone2 = _currentCheckedBone; mbw.weight2 = 1 - distance / _currentCheckedMorphBone.ExternalRange; mbw.AstrictWeights(); _currentCheckedMorphBone.ExternalRangeVertexs.Add(_morphAnimation.Vertexs[i]); } else if (!mbw.bone3) { mbw.bone3 = _currentCheckedBone; mbw.weight3 = 1 - distance / _currentCheckedMorphBone.ExternalRange; mbw.AstrictWeights(); _currentCheckedMorphBone.ExternalRangeVertexs.Add(_morphAnimation.Vertexs[i]); } else { _currentCheckedMorphBone.ErrorVertexs.Add(_morphAnimation.Vertexs[i]); } } } }