コード例 #1
0
ファイル: BlendSpace1D.cs プロジェクト: huangdonghai/titan3d
        protected override void GetRawSamplesFromBlendInput(Vector3 input, List <GridElementSample> gridSamples)
        {
            var griddingIuput = GriddingInput(input);
            var gridIndex     = (int)Math.Truncate(griddingIuput.X);
            var remainder     = griddingIuput.X - gridIndex;
            var beforeIndex   = gridIndex;

            if (mGridElements.Count > beforeIndex)
            {
                GridElementSample newSample = new GridElementSample();
                newSample.GridElement = mGridElements[beforeIndex];
                newSample.BlendWeight = 1 - remainder;
                gridSamples.Add(newSample);
            }
            else
            {
                GridElementSample newSample = new GridElementSample();
                newSample.GridElement = new GridElement(3);
                newSample.BlendWeight = 0;
                gridSamples.Add(newSample);
            }

            var afterIndex = gridIndex + 1;

            if (mGridElements.Count > afterIndex)
            {
                GridElementSample newSample = new GridElementSample();
                newSample.GridElement = mGridElements[afterIndex];
                newSample.BlendWeight = remainder;
                gridSamples.Add(newSample);
            }
            else
            {
                GridElementSample newSample = new GridElementSample();
                newSample.GridElement = new GridElement(3);
                newSample.BlendWeight = 0;
                gridSamples.Add(newSample);
            }
        }
コード例 #2
0
        protected override void GetRawSamplesFromBlendInput(Vector3 input, List <GridElementSample> gridSamples)
        {
            var griddingIuput = GriddingInput(input);
            var gridIndex     = new Vector3((int)Math.Truncate(griddingIuput.X), (int)Math.Truncate(griddingIuput.Y), 0);
            var remainder     = griddingIuput - gridIndex;

            GridElement EleLT   = GetEditorElement((int)gridIndex.X, (int)gridIndex.Y + 1);
            var         LeftTop = new GridElementSample();

            if (EleLT != null)
            {
                LeftTop.GridElement = EleLT;
                // now calculate weight - distance to each corner since input is already normalized within grid, we can just calculate distance
                LeftTop.BlendWeight = (1.0f - remainder.X) * remainder.Y;
            }
            else
            {
                LeftTop.GridElement = new GridElement();
                LeftTop.BlendWeight = 0.0f;
            }
            gridSamples.Add(LeftTop);

            GridElement EleRT    = GetEditorElement((int)gridIndex.X + 1, (int)gridIndex.Y + 1);
            var         RightTop = new GridElementSample();

            if (EleRT != null)
            {
                RightTop.GridElement = EleRT;
                RightTop.BlendWeight = remainder.X * remainder.Y;
            }
            else
            {
                RightTop.GridElement = new GridElement();
                RightTop.BlendWeight = 0.0f;
            }
            gridSamples.Add(RightTop);

            GridElement EleLB      = GetEditorElement((int)gridIndex.X, (int)gridIndex.Y);
            var         LeftBottom = new GridElementSample();

            if (EleLB != null)
            {
                LeftBottom.GridElement = EleLB;
                LeftBottom.BlendWeight = (1.0f - remainder.X) * (1.0f - remainder.Y);
            }
            else
            {
                LeftBottom.GridElement = new GridElement();
                LeftBottom.BlendWeight = 0.0f;
            }
            gridSamples.Add(LeftBottom);

            GridElement EleRB       = GetEditorElement((int)gridIndex.X + 1, (int)gridIndex.Y);
            var         RightBottom = new GridElementSample();

            if (EleRB != null)
            {
                RightBottom.GridElement = EleRB;
                RightBottom.BlendWeight = remainder.X * (1.0f - remainder.Y);
            }
            else
            {
                RightBottom.GridElement = new GridElement();
                RightBottom.BlendWeight = 0.0f;
            }
            gridSamples.Add(RightBottom);
        }