示例#1
0
        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();
        }