예제 #1
0
        public void ShiftToZero(clsHeightmap Source)
        {
            int Y = 0;
            int X = 0;
            sMinMax MinMax = new sMinMax();
            double dblTemp = Source.HeightScale / HeightScale;

            Source.MinMaxGet(MinMax);

            long Offset = 0;
            SizeCopy(Source);
            Offset = Convert.ToInt64(0 - MinMax.Min);
            for ( Y = 0; Y <= HeightData.SizeY - 1; Y++ )
            {
                for ( X = 0; X <= HeightData.SizeX - 1; X++ )
                {
                    HeightData.Height[Y, X] = Convert.ToInt32(Convert.ToDouble(Offset + Source.HeightData.Height[Y, X]) * dblTemp);
                }
            }
        }
예제 #2
0
        public void WaveLow(clsHeightmap Source)
        {
            int Y = 0;
            int X = 0;
            long HeightRange = 0;
            long HeightMin = 0;
            sMinMax MinMax = new sMinMax();

            Source.MinMaxGet(MinMax);
            HeightRange = Convert.ToInt64(MinMax.Max - MinMax.Min);
            HeightMin = MinMax.Min;

            if ( HeightRange == 0.0D )
            {
                return;
            }

            SizeCopy(Source);
            for ( Y = 0; Y <= HeightData.SizeY - 1; Y++ )
            {
                for ( X = 0; X <= HeightData.SizeX - 1; X++ )
                {
                    HeightData.Height[Y, X] =
                        (int)
                            (((1.0D - Math.Sin((1.0D - Convert.ToInt32(Source.HeightData.Height[Y, X] - HeightMin) / HeightRange) * MathUtil.RadOf90Deg)) *
                              HeightRange + HeightMin) * Source.HeightScale / HeightScale);
                }
            }
        }
예제 #3
0
        public void Rescale(clsHeightmap Source, double HeightMin, double HeightMax)
        {
            int Y = 0;
            int X = 0;
            sMinMax MinMax = new sMinMax();

            Source.MinMaxGet(MinMax);

            long HeightRange = 0;
            long Offset = 0;
            double Ratio = 0;
            long lngTemp = 0;

            SizeCopy(Source);
            HeightRange = Convert.ToInt64(MinMax.Max - MinMax.Min);
            Offset = Convert.ToInt64(0 - MinMax.Min);
            if ( HeightRange > 0 )
            {
                Ratio = (HeightMax - HeightMin) / (HeightRange * HeightScale);
                lngTemp = (int)(HeightMin / HeightScale);
                for ( Y = 0; Y <= HeightData.SizeY - 1; Y++ )
                {
                    for ( X = 0; X <= HeightData.SizeX - 1; X++ )
                    {
                        HeightData.Height[Y, X] =
                            Convert.ToInt64(lngTemp + Convert.ToInt32(Convert.ToDouble(Offset + Source.HeightData.Height[Y, X]) * Ratio));
                    }
                }
            }
            else
            {
                lngTemp = (int)((HeightMin + HeightMax) / 2.0D);
                for ( Y = 0; Y <= HeightData.SizeY - 1; Y++ )
                {
                    for ( X = 0; X <= HeightData.SizeX - 1; X++ )
                    {
                        HeightData.Height[Y, X] = lngTemp;
                    }
                }
            }
        }