Exemple #1
0
 public MorphVertex(Vector3 vertex, List <int> vertexIndexs)
 {
     Vertex           = vertex;
     VertexIndexs     = vertexIndexs;
     VertexBoneWeight = new MorphBoneWeight();
 }
Exemple #2
0
    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]);
                }
            }
        }
    }