Ejemplo n.º 1
0
        private void getTessellation()
        {
            try
            {
                primList.Clear();
                primTypes.Clear();

                System.Collections.ArrayList pointList = new ArrayList();
                for (int i = 0; i < m_outerRing.Points.Length; i++)
                {
                    double[] p = new double[3];
                    p[0] = m_outerRing.Points[i].X;
                    p[1] = m_outerRing.Points[i].Y;
                    p[2] = m_outerRing.Points[i].Z;

                    pointList.Add(p);
                }

                Glu.GLUtesselator tess = Glu.gluNewTess();
                Glu.gluTessCallback(tess, Glu.GLU_TESS_BEGIN, new Glu.TessBeginCallback(b));
                Glu.gluTessCallback(tess, Glu.GLU_TESS_END, new Glu.TessEndCallback(e));

                Glu.gluTessCallback(tess, Glu.GLU_TESS_ERROR, new Glu.TessErrorCallback(r));
                Glu.gluTessCallback(tess, Glu.GLU_TESS_VERTEX, new Glu.TessVertexCallback(f));

                Glu.gluTessBeginPolygon(tess, IntPtr.Zero);
                Glu.gluTessBeginContour(tess);

                for (int i = 0; i < pointList.Count - 1; i++)
                {
                    double[] p = (double[])pointList[i];
                    Glu.gluTessVertex(tess, p, p);
                }
                Glu.gluTessEndContour(tess);

                if (m_innerRings != null && m_innerRings.Length > 0)
                {
                    for (int i = 0; i < m_innerRings.Length; i++)
                    {
                        Glu.gluTessBeginContour(tess);
                        for (int j = m_innerRings[i].Points.Length - 1; j >= 0; j--)
                        {
                            double[] p = new double[3];
                            p[0] = m_innerRings[i].Points[j].X;
                            p[1] = m_innerRings[i].Points[j].Y;
                            p[2] = m_innerRings[i].Points[j].Z;
                            Glu.gluTessVertex(tess, p, p);
                        }
                        Glu.gluTessEndContour(tess);
                    }
                }

                Glu.gluTessEndPolygon(tess);
            }
            catch (Exception ex)
            {
                Log.Write(ex);
            }
        }
Ejemplo n.º 2
0
 //4. function to set callback
 //   stores the address of external callback delegate, but gives to OpenGL the address of the internal one
 public static void gluTessCallback([In] Glu.GLUtesselator tess, int which, [In] TessCombineCallback_2 func)
 {
     unsafe
     {
         newTessCombineCallback = func;
         internalCombCB         = new IntTessCombCB(InternalTessCombineCallback);
         __gluTessCallback(tess, which, internalCombCB);
     }
 }
Ejemplo n.º 3
0
        // --- Application Methods ---
        #region Init()
        private static void Init()
        {
            Gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
            Gl.glShadeModel(Gl.GL_FLAT);
            tess = Glu.gluNewTess();
            Glu.gluTessCallback(tess, Glu.GLU_TESS_VERTEX, new Glu.TessVertexCallback1(Gl.glVertex3dv));
            Glu.gluTessCallback(tess, Glu.GLU_TESS_BEGIN, new Glu.TessBeginCallback(Begin));
            Glu.gluTessCallback(tess, Glu.GLU_TESS_END, new Glu.TessEndCallback(End));
            Glu.gluTessCallback(tess, Glu.GLU_TESS_ERROR, new Glu.TessErrorCallback(Error));
            Glu.gluTessCallback(tess, Glu.GLU_TESS_COMBINE, new Glu.TessCombineCallback1(Combine));

            list = Gl.glGenLists(4);
            MakeNewLists();
        }
Ejemplo n.º 4
0
        public void tesselate(bool closed)
        {
            Glu.GLUtesselator tess = Glu.gluNewTess();

            gluTessNew.gluTessCallback(tess, Glu.GLU_TESS_VERTEX, new gluTessNew.TessVertexCallback_2(tessVertex));
            gluTessNew.gluTessCallback(tess, Glu.GLU_TESS_COMBINE, new gluTessNew.TessCombineCallback_2(tessCombine));

            Glu.gluTessCallback(tess, Glu.GLU_TESS_BEGIN, new Glu.TessBeginCallback(Begin));
            Glu.gluTessCallback(tess, Glu.GLU_TESS_END, new Glu.TessEndCallback(End));
            //Glu.gluTessCallback(tess, Glu.GLU_TESS_ERROR, new Glu.TessErrorCallback(Error));
            this.displayList = Gl.glGenLists(1);

            Gl.glNewList(displayList, Gl.GL_COMPILE);
            Glu.gluTessBeginPolygon(tess, IntPtr.Zero);
            Glu.gluTessBeginContour(tess);

            double[][] vert = new double [array.Count][];

            int q;

            for (q = 0; q < array.Count; q++)
            {
                vert[q] = new double [3];
                Vector2f ve = (Vector2f)array[q];
                vert[q][0] = ve.X;
                vert[q][1] = ve.Y;
                vert[q][2] = 0;
                Glu.gluTessVertex(tess, vert[q], vert[q]);
            }

            Glu.gluTessEndContour(tess);
            Glu.gluEndPolygon(tess);
            Gl.glEndList();


            if (closed == false)
            {
                array.Remove(array[array.Count - 1]);
                array.Remove(array[array.Count - 1]);
            }

            render(true);
        }
Ejemplo n.º 5
0
        // --- Application Methods ---
        #region Init()
        private static void Init() {
            Gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
            Gl.glShadeModel(Gl.GL_FLAT);
            tess = Glu.gluNewTess();
            Glu.gluTessCallback(tess, Glu.GLU_TESS_VERTEX, new Glu.TessVertexCallback1(Gl.glVertex3dv));
            Glu.gluTessCallback(tess, Glu.GLU_TESS_BEGIN, new Glu.TessBeginCallback(Begin));
            Glu.gluTessCallback(tess, Glu.GLU_TESS_END, new Glu.TessEndCallback(End));
            Glu.gluTessCallback(tess, Glu.GLU_TESS_ERROR, new Glu.TessErrorCallback(Error));
            Glu.gluTessCallback(tess, Glu.GLU_TESS_COMBINE, new Glu.TessCombineCallback1(Combine));

            list = Gl.glGenLists(4);
            MakeNewLists();
        }
Ejemplo n.º 6
0
 private static extern unsafe void __gluTessCallback(Glu.GLUtesselator tess, int which, IntTessCombCB cb);