private void generateCylinderMesh() { float h = 20.0f; float r = 20.0f; Vector4 p0 = new Vector4(0, h, 0, 1); Vector4 n0 = new Vector4(0, 1, 0, 0); int n = 30; List <Triangle> allTriangles = new List <Triangle>(); //TOP BASE //Triangles Vertex [] allVertexList = new Vertex[(int)(4 * n + 2)]; allVertexList[0] = new Vertex(p0, n0); for (int i = 1; i <= n; i++) { Vector4 pi = new Vector4 { X = (float)(r * Math.Cos((2 * Math.PI / n) * (i - 1))), Y = h, Z = (float)(r * Math.Sin((2 * Math.PI / n) * (i - 1))), W = 1 }; allVertexList[i] = (new Vertex(pi, n0)); } int position = 0; for (int i = 0; i < n; i++) { position = ((i + 2) % (n + 1) == 0) ? 1 : (int)((i + 2) % (n + 1)); allTriangles.Add(new Triangle(allVertexList[0], allVertexList[position], allVertexList[i + 1])); } //BOTTOM BASE allVertexList[4 * n + 1] = (new Vertex(new Vector4(0, 0, 0, 1), new Vector4(0, -1, 0, 0))); for (int i = 3 * n + 1; i < 4 * n + 1; ++i) { allVertexList[i] = new Vertex(new Vector4(r * (float)Math.Cos(2 * Math.PI / n * (i - 1)), 0, r * (float)Math.Sin(2 * Math.PI / n * (i - 1)), 1), new Vector4(0, 1, 0, 0)); } for (int i = 3 * n; i <= 4 * n - 1; ++i) { int index = i + 2; if (index == 4 * n + 1) { index = 3 * n + 1; } allTriangles.Add(new Triangle(allVertexList[4 * n + 1], allVertexList[i + 1], allVertexList[index])); } for (int i = n + 1; i <= 3 * n; ++i) { if (i >= n + 1 && i <= 2 * n) { allVertexList[i] = allVertexList[i - n]; } if (i >= 2 * n + 1 && i <= 3 * n) { allVertexList[i] = allVertexList[i + n]; } } for (int i = n; i <= 3 * n - 1; ++i) { if (i >= n && i <= 2 * n - 2) { allTriangles.Add(new Triangle(allVertexList[i + 1], allVertexList[i + 2], allVertexList[i + 1 + n])); } if (i == 2 * n - 1) { allTriangles.Add(new Triangle(allVertexList[2 * n], allVertexList[n + 1], allVertexList[3 * n])); } if (i >= 2 * n && i <= 3 * n - 2) { allTriangles.Add(new Triangle(allVertexList[i + 1], allVertexList[i + 2 - n], allVertexList[i + 2])); } if (i == 3 * n - 1) { allTriangles.Add(new Triangle(allVertexList[3 * n], allVertexList[n + 1], allVertexList[2 * n + 1])); } } foreach (var triangle in allTriangles) { DrawTriangle(triangle); } }
public Triangle(Vertex _a, Vertex _b, Vertex _c) { a = _a; b = _b; c = _c; }