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); } }
//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); } }
// --- 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(); }
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); }
// --- 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(); }
private static extern unsafe void __gluTessCallback(Glu.GLUtesselator tess, int which, IntTessCombCB cb);