Ejemplo n.º 1
0
        public static void Torus(float ringRadius = 0.2f, float tubeRadius = 0.8f, int numc = 6, int numt = 12) {
            List<float> data = null;
            foreach (KeyValuePair<tshape, List<float>> kvp in torusData) {
                if (kvp.Key.rr == ringRadius && kvp.Key.tr == tubeRadius && kvp.Key.nc == numc && kvp.Key.nt == numt) {
                    data = kvp.Value;
                }
            }
            if (data == null) {
                tshape key = new tshape();
                key.rr = ringRadius;
                key.tr = tubeRadius;
                key.nc = numc;
                key.nt = numt;

                KeyValuePair<tshape, List<float>> newItem = new KeyValuePair<tshape, List<float>>(key, new List<float>());
                torusData.Add(newItem);
                data = torusData[torusData.Count - 1].Value;

                int i, j, k;
                double s, t, x, y, z, twopi;

                twopi = 2.0 * (double)Math.PI;
                for (i = 0; i < numc; i++) {
                    for (j = 0; j <= numt; j++) {
                        for (k = 1; k >= 0; k--) {
                            s = (i + k) % numc + 0.5;
                            t = j % numt;

                            x = (tubeRadius + ringRadius * Math.Cos(s * twopi / numc)) * Math.Cos(t * twopi / numt);
                            y = (tubeRadius + ringRadius * Math.Cos(s * twopi / numc)) * Math.Sin(t * twopi / numt);
                            z = ringRadius * Math.Sin(s * twopi / numc);

                            float[] n = { (float)x, (float)y, (float)z };
                            n = Normalize(n);

                            //GL.Normal3(n);
                            data.Add(n[0]);
                            data.Add(n[1]);
                            data.Add(n[2]);
                            //GL.Vertex3(x, y, z);
                            data.Add((float)x);
                            data.Add((float)y);
                            data.Add((float)z);
                        }
                    }
                }
            }

            GL.Begin(PrimitiveType.QuadStrip);
            int a = 0;
            while (a < data.Count) {
                GL.Normal3(data[a++], data[a++], data[a++]);
                GL.Vertex3(data[a++], data[a++], data[a++]);
            }
            GL.End();
        }
Ejemplo n.º 2
0
        public static void Torus(float ringRadius = 0.2f, float tubeRadius = 0.8f, int numc = 6, int numt = 12)
        {
            List <float> data = null;

            foreach (KeyValuePair <tshape, List <float> > kvp in torusData)
            {
                if (kvp.Key.rr == ringRadius && kvp.Key.tr == tubeRadius && kvp.Key.nc == numc && kvp.Key.nt == numt)
                {
                    data = kvp.Value;
                }
            }
            if (data == null)
            {
                tshape key = new tshape();
                key.rr = ringRadius;
                key.tr = tubeRadius;
                key.nc = numc;
                key.nt = numt;

                KeyValuePair <tshape, List <float> > newItem = new KeyValuePair <tshape, List <float> >(key, new List <float>());
                torusData.Add(newItem);
                data = torusData[torusData.Count - 1].Value;

                int    i, j, k;
                double s, t, x, y, z, twopi;

                twopi = 2.0 * (double)Math.PI;
                for (i = 0; i < numc; i++)
                {
                    for (j = 0; j <= numt; j++)
                    {
                        for (k = 1; k >= 0; k--)
                        {
                            s = (i + k) % numc + 0.5;
                            t = j % numt;

                            x = (tubeRadius + ringRadius * Math.Cos(s * twopi / numc)) * Math.Cos(t * twopi / numt);
                            y = (tubeRadius + ringRadius * Math.Cos(s * twopi / numc)) * Math.Sin(t * twopi / numt);
                            z = ringRadius * Math.Sin(s * twopi / numc);

                            float[] n = { (float)x, (float)y, (float)z };
                            n = Normalize(n);

                            //GL.Normal3(n);
                            data.Add(n[0]);
                            data.Add(n[1]);
                            data.Add(n[2]);
                            //GL.Vertex3(x, y, z);
                            data.Add((float)x);
                            data.Add((float)y);
                            data.Add((float)z);
                        }
                    }
                }
            }

            GL.Begin(PrimitiveType.QuadStrip);
            int a = 0;

            while (a < data.Count)
            {
                GL.Normal3(data[a++], data[a++], data[a++]);
                GL.Vertex3(data[a++], data[a++], data[a++]);
            }
            GL.End();
        }