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; }