Ejemplo n.º 1
0
        private ITriangleMesh CreateMiddle(ITriangleMesh mesh, List <Hexagon> borderHexagons, float sideLength)
        {
            ITriangleMesh bottomMesh = new TriangleMesh();

            foreach (Hexagon hex in borderHexagons)
            {
                ITriangleMesh hexMesh = hex.GenerateMesh();
                TriangleMeshFactory.Flip(hexMesh);
                TriangleMeshFactory.Unite(bottomMesh, hexMesh);
            }
            TriangleMeshFactory.Translate(bottomMesh, new Vector3(0, 0, -sideLength));
            return(bottomMesh);
        }
Ejemplo n.º 2
0
        public ITriangleMesh GenerateIslandMesh()
        {
            HexagonField field = new HexagonField();

            field.GenerateField();

            ITriangleMesh mesh = new TriangleMesh();

            // Top
            ITriangleMesh topMesh = CreateTopSurface(field.GetAllHexagons());

            TriangleMeshFactory.Unite(mesh, topMesh);

            // Grass
            float grassBorderHeight = field.SideLength * 0.1f;

            Vector2[]     grassBoundaryTexCoords = { new Vector2(0.1f, 0.1f), new Vector2(0.1f, 0.2f), new Vector2(0.2f, 0.1f), new Vector2(0.2f, 0.2f) };
            ITriangleMesh grassBoundary          = CreateBoundary(mesh, field.SideLength, grassBorderHeight, grassBorderHeight, new Vector3(0, 0, 0), grassBoundaryTexCoords);

            TriangleMeshFactory.Unite(mesh, grassBoundary);

            // Middle-bottom
            ITriangleMesh middleMesh = CreateMiddle(mesh, field.GetBorderHexagons(), field.SideLength);

            TriangleMeshFactory.Unite(mesh, middleMesh);

            ITriangleMesh bottomMesh = CreateTopSurface(field.GetNonBorderHexagons());

            // Mud
            float mudHeight       = 2 * field.SideLength;
            float mudBorderHeight = field.SideLength * 0.3f;

            Vector2[]     mudBoundaryTexCoords = { new Vector2(0.7f, 0.1f), new Vector2(0.7f, 0.2f), new Vector2(0.8f, 0.1f), new Vector2(0.8f, 0.2f) };
            ITriangleMesh mudBoundary          = CreateBoundary(bottomMesh, mudHeight, 0, mudBorderHeight, new Vector3(0, 0, 0), mudBoundaryTexCoords);

            TriangleMeshFactory.Translate(mudBoundary, new Vector3(0, 0, -field.SideLength));
            TriangleMeshFactory.Unite(mesh, mudBoundary);

            // Bottom
            TriangleMeshFactory.Flip(bottomMesh);
            TriangleMeshFactory.Translate(bottomMesh, new Vector3(0, 0, -(mudHeight + field.SideLength)));
            TriangleMeshFactory.Unite(mesh, bottomMesh);

            mesh = TriangleMeshFactory.Snap(mesh, 1e-5f);

            mesh.ComputeTriangleNormals();
            mesh.SetTexture(new Texture("textures/island.png"));
            return(mesh);
        }
Ejemplo n.º 3
0
        /**
         * Create the mesh for the top.
         * */
        private ITriangleMesh CreateTopSurface(List <Hexagon> hexagons)
        {
            ITriangleMesh mesh = new TriangleMesh();

            foreach (Hexagon hex in hexagons)
            {
                if (!hex.ConsistencyCheck())
                {
                    Console.WriteLine("Inconsistency detected!");
                }
                ITriangleMesh hexMesh = hex.GenerateMesh();
                TriangleMeshFactory.Unite(mesh, hexMesh);
            }
            mesh = TriangleMeshFactory.Snap(mesh, 1e-5f);
            return(mesh);
        }