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();
        }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值