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