private static void Display() { float[] knots = { 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f }; // counter clockwise float[ , ] edgePoints = { { 0.0f, 0.0f }, { 1.0f, 0.0f }, { 1.0f, 1.0f }, { 0.0f, 1.0f }, { 0.0f, 0.0f } }; // clockwise float[ , ] curvePoints = { { 0.25f, 0.5f }, { 0.25f, 0.75f }, { 0.75f, 0.75f }, { 0.75f, 0.5f } }; float[] curveKnots = { 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f }; // clockwise float[ , ] pwlPoints = { { 0.75f, 0.5f }, { 0.5f, 0.25f }, { 0.25f, 0.5f } }; Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT); Gl.glPushMatrix(); Gl.glRotatef(330.0f, 1.0f, 0.0f, 0.0f); Gl.glScalef(0.5f, 0.5f, 0.5f); Glu.gluBeginSurface(nurb); Glu.gluNurbsSurface(nurb, 8, knots, 8, knots, 4 * 3, 3, controlPoints, 4, 4, Gl.GL_MAP2_VERTEX_3); Glu.gluBeginTrim(nurb); Glu.gluPwlCurve(nurb, 5, edgePoints, 2, Glu.GLU_MAP1_TRIM_2); Glu.gluEndTrim(nurb); Glu.gluBeginTrim(nurb); Glu.gluNurbsCurve(nurb, 8, curveKnots, 2, curvePoints, 4, Glu.GLU_MAP1_TRIM_2); Glu.gluPwlCurve(nurb, 3, pwlPoints, 2, Glu.GLU_MAP1_TRIM_2); Glu.gluEndTrim(nurb); Glu.gluEndSurface(nurb); Gl.glPopMatrix(); Gl.glFlush(); }