private IEnumerable <Face3> CreateFacesForColumnMajorList(int width, int height) { var faces = new List <Face3>(); for (var i = 0; i < width; i++) { for (var j = 0; j < height; j++) { var verticesInColumn = height + 1; var v0 = i * verticesInColumn + j; var v1 = (i + 1) * verticesInColumn + j; var v2 = (i + 1) * verticesInColumn + (j + 1); var v3 = i * verticesInColumn + (j + 1); var f0 = new Face3 { V0 = v0, V1 = v1, V2 = v2 }; var f1 = new Face3 { V0 = v0, V1 = v2, V2 = v3 }; faces.Add(f0); faces.Add(f1); } } return(faces); }
private IEnumerable<Face3> CreateFacesForColumnMajorList(int width, int height) { var faces = new List<Face3>(); for (var i = 0; i < width; i++) { for (var j = 0; j < height; j++) { var verticesInColumn = height + 1; var v0 = i * verticesInColumn + j; var v1 = (i + 1) * verticesInColumn + j; var v2 = (i + 1) * verticesInColumn + (j + 1); var v3 = i * verticesInColumn + (j + 1); var f0 = new Face3 { V0 = v0, V1 = v1, V2 = v2 }; var f1 = new Face3 { V0 = v0, V1 = v2, V2 = v3 }; faces.Add(f0); faces.Add(f1); } } return faces; }
public static Mesh3V3N CreateFromHeightMap(int columns, int rows, IHeightMap heightMap) { var vertices = new List<Vertex3V3N>(); for (var x = 0; x <= columns; x++) { for (var y = 0; y <= rows; y++) { var height = heightMap.GetHeight(x, y); vertices.Add(new Vertex3V3N { Position = new Vector3(x, (float)height, y), Normal = (Vector3)heightMap.GetNormal(x, y) }); } } var faces = new List<Face3>(); for (var x = 0; x < columns; x++) { for (var y = 0; y < rows; y++) { var verticesInColumn = rows + 1; var v0 = x * verticesInColumn + y; var v1 = (x + 1) * verticesInColumn + y; var v2 = (x + 1) * verticesInColumn + y + 1; var v3 = x * verticesInColumn + y + 1; Face3 f0; Face3 f1; if (y % 2 == 0) { if (x % 2 == 0) { f0 = new Face3 { V0 = v0, V1 = v1, V2 = v2 }; f1 = new Face3 { V0 = v0, V1 = v2, V2 = v3 }; } else { f0 = new Face3 { V0 = v0, V1 = v1, V2 = v3 }; f1 = new Face3 { V0 = v1, V1 = v2, V2 = v3 }; } } else { if (x % 2 == 0) { f0 = new Face3 { V0 = v0, V1 = v1, V2 = v3 }; f1 = new Face3 { V0 = v1, V1 = v2, V2 = v3 }; } else { f0 = new Face3 { V0 = v0, V1 = v1, V2 = v2 }; f1 = new Face3 { V0 = v0, V1 = v2, V2 = v3 }; } } faces.Add(f0); faces.Add(f1); } } return new Mesh3V3N(vertices, faces).Transformed(Matrix4.CreateTranslation(-columns / 2, 0, -rows / 2) * Matrix4.CreateScale((float)(1.0 / columns), 1, (float)(1.0 / rows))); }