private void CopyToTerrainBuffers(VertexMultitextured[] vertices, int[] indices)
        {
            VertexDeclaration vertexDeclaration = new VertexDeclaration(VertexMultitextured.VertexElements);

            _geometryAndSettings.landVertexBuffer = new VertexBuffer(_geometryAndSettings.device, vertexDeclaration, vertices.Length, BufferUsage.WriteOnly);
            _geometryAndSettings.landVertexBuffer.SetData(vertices.ToArray());

            _geometryAndSettings.sharedIndexBuffer = new IndexBuffer(_geometryAndSettings.device, typeof(int), indices.Length, BufferUsage.WriteOnly);
            _geometryAndSettings.sharedIndexBuffer.SetData(indices);
        }
        private VertexMultitextured[] CalculateNormals(VertexMultitextured[] vertices, int[] indices)
        {
            for (int i = 0; i < vertices.Length; i++)
                vertices[i].Normal = new Vector3(0, 0, 0);

            for (int i = 0; i < indices.Length / 3; i++)
            {
                int index1 = indices[i * 3];
                int index2 = indices[i * 3 + 1];
                int index3 = indices[i * 3 + 2];

                Vector3 side1 = vertices[index1].Position - vertices[index3].Position;
                Vector3 side2 = vertices[index1].Position - vertices[index2].Position;
                Vector3 normal = Vector3.Cross(side1, side2);

                vertices[index1].Normal += normal;
                vertices[index2].Normal += normal;
                vertices[index3].Normal += normal;
            }

            for (int i = 0; i < vertices.Length; i++)
                vertices[i].Normal.Normalize();

            return vertices;
        }