Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
 public Triangle(Vertex _a, Vertex _b, Vertex _c)
 {
     a = _a;
     b = _b;
     c = _c;
 }