Ejemplo n.º 1
0
        /// <summary>
        /// Render to the provided instance of OpenGL.
        /// </summary>
        /// <param name="gl">The OpenGL instance.</param>
        /// <param name="renderMode">The render mode.</param>
        public override void Render(OpenGL gl, RenderMode renderMode)
        {
            //	Create the evaluator.
            gl.Map2(OpenGL.GL_MAP2_VERTEX_3,       //	Use and produce 3D points.
                    0,                             //	Low order value of 'u'.
                    1,                             //	High order value of 'u'.
                    3,                             //	Size (bytes) of a control point.
                    ControlPoints.Width,           //	Order (i.e degree plus one).
                    0,                             //	Low order value of 'v'.
                    1,                             //	High order value of 'v'
                    ControlPoints.Width * 3,       //	Size in bytes of a 'row' of points.
                    ControlPoints.Height,          //	Order (i.e degree plus one).
                    ControlPoints.ToFloatArray()); //	The control points.

            gl.Enable(OpenGL.GL_MAP2_VERTEX_3);
            gl.Enable(OpenGL.GL_AUTO_NORMAL);
            gl.MapGrid2(20, 0, 1, 20, 0, 1);

            //	Now draw it.
            gl.EvalMesh2(OpenGL.GL_FILL, 0, 20, 0, 20);

            //	Draw the control points.
            ControlPoints.Draw(gl, DrawControlPoints, DrawControlGrid);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Draws the specified gl.
        /// </summary>
        /// <param name="gl">The gl.</param>
        /// <param name="grid">The grid.</param>
        /// <param name="scale">The scale.</param>
        /// <param name="type">The type.</param>
        public void Draw(OpenGL gl, int grid, double scale, uint type)
        {
            float[, ,] p = new float[4, 4, 3];
            float[, ,] q = new float[4, 4, 3];
            float[, ,] r = new float[4, 4, 3];
            float[, ,] s = new float[4, 4, 3];

            gl.PushAttrib(OpenGL.GL_ENABLE_BIT | OpenGL.GL_EVAL_BIT);
            gl.Enable(OpenGL.GL_AUTO_NORMAL);
            gl.Enable(OpenGL.GL_NORMALIZE);
            gl.Enable(OpenGL.GL_MAP2_VERTEX_3);
            gl.Enable(OpenGL.GL_MAP2_TEXTURE_COORD_2);
            gl.PushMatrix();
            gl.Rotate(270.0f, 1.0f, 0.0f, 0.0f);
            gl.Scale(0.5f * scale, 0.5f * scale, 0.5f * scale);
            gl.Translate(0.0, 0.0, -1.5);

            for (int i = 0; i < 10; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    for (int k = 0; k < 4; k++)
                    {
                        for (int l = 0; l < 3; l++)
                        {
                            p[j, k, l] = cpdata[patchdata[i, (j * 4 + k)], l];
                            q[j, k, l] = cpdata[patchdata[i, (j * 4 + (3 - k))], l];
                            if (l == 1)
                            {
                                q[j, k, l] *= -1.0f;
                            }
                            if (i < 6)
                            {
                                r[j, k, l] =
                                    cpdata[patchdata[i, (j * 4 + (3 - k))], l];
                                if (l == 0)
                                {
                                    r[j, k, l] *= -1.0f;
                                }
                                s[j, k, l] = cpdata[patchdata[i, (j * 4 + k)], l];
                                if (l == 0)
                                {
                                    s[j, k, l] *= -1.0f;
                                }
                                if (l == 1)
                                {
                                    s[j, k, l] *= -1.0f;
                                }
                            }
                        }
                    }
                }
                gl.Map2(OpenGL.GL_MAP2_TEXTURE_COORD_2, 0.0f, 1.0f, 2, 2, 0.0f, 1.0f, 4, 2,
                        tex.Flatten());
                gl.Map2(OpenGL.GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
                        p.Flatten());
                gl.MapGrid2(grid, 0.0, 1.0, grid, 0.0, 1.0);
                gl.EvalMesh2(type, 0, grid, 0, grid);
                gl.Map2(OpenGL.GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
                        q.Flatten());
                gl.EvalMesh2(type, 0, grid, 0, grid);
                if (i < 6)
                {
                    gl.Map2(OpenGL.GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
                            r.Flatten());
                    gl.EvalMesh2(type, 0, grid, 0, grid);
                    gl.Map2(OpenGL.GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
                            s.Flatten());
                    gl.EvalMesh2(type, 0, grid, 0, grid);
                }
            }


            gl.PopMatrix();
            gl.PopAttrib();
        }