VertexPos3Tex2[] BuildTerrain(TerrainMap map, ref int totalTriangles) { TileDrawInfo drawInfo = new TileDrawInfo(); int lengthX = map.Width; int lengthY = map.Length; VertexPos3Tex2[] vertices = new VertexPos3Tex2[lengthX * lengthY * 4]; int index = 0; for (int x = 0; x < lengthX; x++) { for (int y = 0; y < lengthY; y++) { Tile tile = map[x, y]; drawInfo.CurrentTile = tile; drawInfo.MapX = x; drawInfo.MapY = y; RenderTile(drawInfo, vertices, index); index += 4; } } // end for totalTriangles = drawInfo.TotalTriangles; return(vertices); }
void RenderTile(TileDrawInfo drawInfo, VertexPos3Tex2[] vertices, int index) { Tile tile = drawInfo.CurrentTile; X = tile.X; Y = tile.Y; height = tile.Height; RectangleF texRec = TerrainHelper.GetTexRec(tile.TerrainId); vertices[index] = new VertexPos3Tex2(X, height, Y, texRec.Left, texRec.Top); vertices[index + 1] = new VertexPos3Tex2(X + tileWidth, height, Y, texRec.Right, texRec.Top); vertices[index + 2] = new VertexPos3Tex2(X + tileWidth, height, Y + tileWidth, texRec.Right, texRec.Bottom); vertices[index + 3] = new VertexPos3Tex2(X, height, Y + tileWidth, texRec.Left, texRec.Bottom); drawInfo.TotalTriangles += 2; }