Example #1
0
        public void RenderMountain()
        {
            List <EPMPoint>    mountainPoints    = m_terrain.ExtractPoints_ByTypes(null, EPMPoint.GenerateTypesInt(false, EPMPoint.PointType.Mountain));
            List <EPMTriangle> mountainTriangles = m_terrain.ExtractTriangles_ByVertex(mountainPoints);

            for (int i = 0; i < mountainTriangles.Count; i++)
            {
                mountainTriangles[i].SetType(EPMPoint.PointType.Mountain);
            }

            for (int k = 0; k < g_customData.mountainLists.Count; k++)
            {
                List <Vector2d> mountain = g_customData.mountainLists[k];
                for (int i = 0; i < mountain.Count; i++)
                {
                    EPMHeightSampler.DistanceToPoint(m_terrain.RandomDouble(m_defaultMountainHeight / 2, m_defaultMountainHeight * 1.5f), mountain[i], m_mountainRadius * 1.5f, mountainPoints, EPMHeightSampler.CurveMode.ReverseLinear);
                }
            }

            for (int i = 0; i < mountainPoints.Count; i++)
            {
                mountainPoints[i].ApplyHeight();
            }

            //find summit, the summit is the point that all its neighbors height is lower than it.
            List <EPMPoint> summitPoints = new List <EPMPoint>();

            for (int i = 0; i < mountainPoints.Count; i++)
            {
                EPMPoint p = mountainPoints[i];
                if (p.g_neighbors.Count <= 2)
                {
                    continue;
                }
                bool summit = true;
                for (int j = 0; j < p.g_neighbors.Count; j++)
                {
                    if (p.posY <= p.g_neighbors[j].posY)
                    {
                        summit = false;
                        break;
                    }
                }
                if (summit)
                {
                    summitPoints.Add(p);
                }
            }

            for (int i = 0; i < summitPoints.Count; i++)
            {
                List <EPMTriangle> l = m_terrain.ExtractTriangles_PointsInCircle(summitPoints[i].pos2d, m_mountainRadius * m_terrain.RandomDouble(0.2f, 0.4f), 1, mountainTriangles);
                for (int j = 0; j < l.Count; j++)
                {
                    l[j].SetType(EPMPoint.PointType.MountainSummit);
                }
            }
        }
Example #2
0
        public static void SampleHeightByPoint(EPMBaseTerrain terrain, int pointNum, Vector2d radiusRange, EPMHeightSampler.CurveMode curve, EPMHeightSampler.CombineMode combine, double limitation)
        {
            List <EPMPoint> pointList = terrain.ExtractPoints_ByTypes(null, EPMPoint.GenerateTypesInt(true, EPMPoint.PointType.Ocean));

            EPMPoint.HighestHeight = EPMPoint.LowestHeight = 0;
            for (int i = 0; i < pointNum; i++)
            {
                double   radius = (double)terrain.RandomDouble(radiusRange.x, radiusRange.y);
                double   height = (double)terrain.RandomDouble(-1f, 1f);
                Vector2d point  = new Vector2d(terrain.RandomDouble(0, terrain.getXLength()), terrain.RandomDouble(0f, terrain.getZlength()));
                EPMHeightSampler.DistanceToPoint(height, point, radius, pointList, curve, combine, limitation);
            }
        }
Example #3
0
        public void SmoothRiver()
        {
            List <EPMPoint> plist = m_terrain.ExtractPoints_ByTypes(null, EPMPoint.GenerateTypesInt(false, EPMPoint.PointType.River));

            for (int i = 0; i < plist.Count; i++)
            {
                plist[i].posY = -3;
            }
            for (int i = 0; i < g_customData.riverLists.Count; i++)
            {
                List <Vector2d> river = g_customData.riverLists[i];
                for (int j = 1; j < river.Count; j++)
                {
                    EPMHeightSampler.DirectionalDistance(0.5f, river[j] - river[j - 1], 100, plist, -1f);
                }
            }

            for (int i = 0; i < plist.Count; i++)
            {
                plist[i].ApplyHeight();
            }
        }
Example #4
0
        public void RenderRiver()
        {
            List <EPMPoint> riverPoints = m_terrain.ExtractPoints_ByTypes(null, EPMPoint.GenerateTypesInt(false, EPMPoint.PointType.RiverSide, EPMPoint.PointType.River));

            for (int k = 0; k < g_customData.riverLists.Count; k++)
            {
                List <Vector2d> river = g_customData.riverLists[k];
                for (int i = 1; i < river.Count; i++)
                {
                    EPMHeightSampler.DistanceToLine(5, river[i - 1], river[i], m_riverHalfWidth, riverPoints, EPMHeightSampler.CurveMode.CosineQuarter, EPMHeightSampler.CombineMode.SubtractWithLimitation, -3);
                    if (i != river.Count - 1)
                    {
                        EPMHeightSampler.DistanceToPoint(5, river[i], m_riverHalfWidth, riverPoints, EPMHeightSampler.CurveMode.CosineQuarter, EPMHeightSampler.CombineMode.SubtractWithLimitation, -3);
                    }
                }
            }

            for (int i = 0; i < riverPoints.Count; i++)
            {
                riverPoints[i].ApplyHeight();
            }
        }
Example #5
0
        public void RenderHill()
        {
            List <EPMPoint> hillPoints = m_terrain.ExtractPoints_ByTypes(null, EPMPoint.GenerateTypesInt(false, EPMPoint.PointType.Hill));

            for (int k = 0; k < g_customData.hillLists.Count; k++)
            {
                List <Vector2d> hill = g_customData.hillLists[k];
                for (int i = 1; i < hill.Count; i++)
                {
                    EPMHeightSampler.DistanceToLine(m_defaultHillHeight, hill[i - 1], hill[i], m_hillHalfWidth * 1.2f, hillPoints, EPMHeightSampler.CurveMode.CosineHalf);
                }
            }

            for (int i = 0; i < hillPoints.Count; i++)
            {
                hillPoints[i].ApplyHeight();
            }

            for (int k = 0; k < g_customData.hillLists.Count; k++)
            {
                List <Vector2d> hill = g_customData.hillLists[k];
                for (int i = 1; i < hill.Count; i++)
                {
                    EPMHeightSampler.DirectionalDistance(m_terrain.RandomDouble(2f, 5f), hill[i] - hill[i - 1], 50f, hillPoints, m_defaultHillHeight * 1.5f, 2);
                }
            }

            List <EPMTriangle> hillTriangles = m_terrain.ExtractTriangles_ByVertex(hillPoints);

            for (int i = 0; i < hillTriangles.Count; i++)
            {
                if (hillTriangles[i].HasShapeType(EPMPoint.GetGroundEnums()))
                {
                    hillTriangles[i].SetType(EPMPoint.PointType.Hill);
                }
            }
        }