Beispiel #1
0
        //Methods//
        public void Build(IModule sourceModule)
        {
            Model.Plane planeModel = new Model.Plane(sourceModule);
            double      xExtent    = UpperXBound - LowerXBound;
            double      zExtent    = UpperZBound - LowerZBound;
            double      xDelta     = xExtent / (double)Map.Width;
            double      zDelta     = zExtent / (double)Map.Height;
            double      xCur       = LowerXBound;
            double      zCur       = LowerZBound;

            for (int z = 0; z < Map.Height; z++)
            {
                xCur = LowerXBound;

                for (int x = 0; x < Map.Width; x++)
                {
                    float finalValue;

                    if (!IsSeamless)
                    {
                        finalValue = (float)planeModel.GetValue(xCur, zCur);
                    }

                    else
                    {
                        double swValue, seValue, nwValue, neValue;
                        swValue = planeModel.GetValue(xCur, zCur);
                        seValue = planeModel.GetValue(xCur + xExtent, zCur);
                        nwValue = planeModel.GetValue(xCur, zCur + zExtent);
                        neValue = planeModel.GetValue(xCur + xExtent, zCur + zExtent);
                        double xBlend = 1.0 - ((xCur - LowerXBound) / xExtent);
                        double zBlend = 1.0 - ((zCur - LowerZBound) / zExtent);
                        double z0     = MathUtils.LinearInterp(swValue, seValue, xBlend);
                        double z1     = MathUtils.LinearInterp(nwValue, neValue, xBlend);
                        finalValue = (float)MathUtils.LinearInterp(z0, z1, zBlend);
                    }

                    Map.SetValue(x, z, finalValue);
                    xCur += xDelta;
                }

                zCur += zDelta;
            }
        }
        //Methods//
        public void Build(IModule sourceModule)
        {
            Model.Plane planeModel = new Model.Plane(sourceModule);

            double xExtent = UpperXBound - LowerXBound;
            double zExtent = UpperZBound - LowerZBound;
            double xDelta = xExtent / (double)Map.Width;
            double zDelta = zExtent / (double)Map.Height;
            double xCur = LowerXBound;
            double zCur = LowerZBound;

            for (int z = 0; z < Map.Height; z++) {
                xCur = LowerXBound;
                for (int x = 0; x < Map.Width; x++) {
                    float finalValue;
                    if (!IsSeamless) {
                        finalValue = (float)planeModel.GetValue(xCur, zCur);
                    }
                    else {
                        double swValue, seValue, nwValue, neValue;
                        swValue = planeModel.GetValue(xCur, zCur);
                        seValue = planeModel.GetValue(xCur + xExtent, zCur);
                        nwValue = planeModel.GetValue(xCur, zCur + zExtent);
                        neValue = planeModel.GetValue(xCur + xExtent, zCur + zExtent);
                        double xBlend = 1.0 - ((xCur - LowerXBound) / xExtent);
                        double zBlend = 1.0 - ((zCur - LowerZBound) / zExtent);
                        double z0 = MathUtils.LinearInterp(swValue, seValue, xBlend);
                        double z1 = MathUtils.LinearInterp(nwValue, neValue, xBlend);
                        finalValue = (float)MathUtils.LinearInterp(z0, z1, zBlend);
                    }
                    Map.SetValue(x, z, finalValue);
                    xCur += xDelta;
                }
                zCur += zDelta;
            }
        }