天天看點

OpenGL 漸變色背景OpenGL 漸變色背景

OpenGL 漸變色背景

廢話少說,上圖:

OpenGL 漸變色背景OpenGL 漸變色背景

示例源碼下載下傳:https://download.csdn.net/download/wyq1153/15869741

關鍵代碼如下:

uint ID_BACK = 0;
        void InitLinnerBack()
        {
            ID_BACK = gl.GenLists(1);
            gl.NewList(ID_BACK, OpenGL.GL_COMPILE);

            double width = gl.RenderContextProvider.Width;
            double height = gl.RenderContextProvider.Height;

            //  Create the appropriate projection matrix.
            gl.MatrixMode(OpenGL.GL_PROJECTION);
            gl.PushMatrix();
            gl.LoadIdentity();

            int[] viewport = new int[4];
            gl.GetInteger(OpenGL.GL_VIEWPORT, viewport);
            gl.Ortho(0, width, 0, height, -1, 1);

            //  Create the appropriate modelview matrix.
            gl.MatrixMode(OpenGL.GL_MODELVIEW);
            gl.PushMatrix();
            gl.LoadIdentity();
            gl.RasterPos(-width, -height);

            gl.PushAttrib(OpenGL.GL_LIST_BIT | OpenGL.GL_CURRENT_BIT |
                OpenGL.GL_ENABLE_BIT | OpenGL.GL_TRANSFORM_BIT);

            gl.Color(1.0, 1.0, 1.0);
            gl.Disable(OpenGL.GL_LIGHTING);
            gl.Disable(OpenGL.GL_TEXTURE_2D);
            gl.Disable(OpenGL.GL_DEPTH_TEST);
            gl.RasterPos(-width, -height);

            // pos
            List<Point[]> pos = new List<Point[]>();
            Point pc = new Point(width * 0.5, height * 0.3);
            double rad = Math.Max(pc.X, pc.Y);

            RotateTransform rota = new RotateTransform(0, width * 0.5, height * 0.5);
            Point psrc = new Point(width * 0.5, -rad);
            for (int i = 0; i < 360; i += 10)
            {
                Point[] arr_top = new Point[3];
                rota.Angle = i;
                arr_top[0] = rota.Transform(psrc);
                rota.Angle = i + 10;
                arr_top[1] = rota.Transform(psrc);
                arr_top[2] = pc;

                pos.Add(arr_top);
            }

            //  draw
            Color cr = Colors.White;
            Color cc = Color.FromRgb(180, 186, 189);
            foreach (var item in pos)
            {
                gl.Begin(OpenGL.GL_POLYGON);
                gl.Color(cr);
                gl.Vertex(item[0].X, item[0].Y);
                gl.Color(cr);
                gl.Vertex(item[1].X, item[1].Y);
                gl.Color(cc);
                gl.Vertex(item[2].X, item[2].Y);
                gl.End();
            }

            //  Reset the list bit.
            gl.PopAttrib();

            //  Pop the modelview.
            gl.PopMatrix();

            //  back to the projection and pop it, then back to the model view.
            gl.MatrixMode(OpenGL.GL_PROJECTION);
            gl.PopMatrix();
            gl.MatrixMode(OpenGL.GL_MODELVIEW);

            gl.EndList();
        }
           

繼續閱讀