public static Triangle[] Triangulate(this TerrainFile @this)
        {
            var heightMap = @this.GenerateRealMap();

            var weight = heightMap.GetLength(0);
            var height = heightMap.GetLength(1);

            bool TryGetValue(int x, int y, out Vector3 value)
            {
                try
                {
                    value = heightMap[x, y];

                    return(true);
                }
                catch
                {
                    value = Vector3.Zero;

                    return(false);
                }
            }

            var triangles = new List <Triangle>();

            for (var y = 0; y < height; y += 1)
            {
                for (var x = 0; x < weight; x += 1)
                {
                    {
                        if (!TryGetValue(x, y, out var source))
                        {
                            continue;
                        }

                        if (!TryGetValue(x + 1, y, out var next))
                        {
                            continue;
                        }

                        if (!TryGetValue(x, y + 1, out var top))
                        {
                            continue;
                        }

                        var triangle = new Triangle
                        {
                            Position1 = top,
                            Position2 = next,
                            Position3 = source
                        };

                        triangles.Add(triangle);
                    }

                    {
                        if (!TryGetValue(x, y + 1, out var source))
                        {
                            continue;
                        }

                        if (!TryGetValue(x + 1, y + 1, out var next))
                        {
                            continue;
                        }

                        if (!TryGetValue(x + 1, y, out var top))
                        {
                            continue;
                        }

                        var triangle = new Triangle
                        {
                            Position1 = source,
                            Position2 = next,
                            Position3 = top
                        };

                        triangles.Add(triangle);
                    }
                }
            }

            return(triangles.ToArray());
        }