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); } }
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); }