namespace sharpGLTest05
{
public partial class SharpGLForm : Form
{
public SharpGLForm()
{
InitializeComponent();
}
private void openGLControl_OpenGLDraw(object sender, RenderEventArgs e)
{
OpenGL gl = openGLControl.OpenGL;
gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
gl.LoadIdentity();
display(gl);
}
void display(OpenGL gl)
{
gl.Color(1.0, 0.0, 0.0);
/*
* Viewport()函数,可以将透视投影、正射投影等类似的视景体显示到屏幕指定的区域内
* 默认情况下,视口就是你用来绘制3D图像的整个矩形区域
* 1)Viewport定义了视口在窗口中的区域,同时也规定看二维像素平面到视口区域的映射关系
* 2)可以利用Viewport()生成多窗口效果
* Viewport(0,0,w/2,h/2); 左下角
* Viewport(w/2,0,w/2,h/2); 右下角
* Viewport(0,h/2,w/2,h/2); 左上角
* Viewport(w/2,h/2,w/2,h/2); 右上角
* */
//画分割线,分成四个视见区
gl.Viewport(0, 0, 600, 600);
gl.Begin(OpenGL.GL_LINES);
{
gl.Vertex(-1.0, 0);
gl.Vertex(1.0, 0);
gl.Vertex(0.0, -1.0);
gl.Vertex(0.0, 1.0);
}
gl.End();
//定义在左下角的区域
gl.Color(0.0, 1.0, 0.0);
gl.Viewport(0, 0, 200, 200);
gl.Begin(OpenGL.GL_POLYGON);
{
gl.Vertex(-0.5, -0.5);
gl.Vertex(-0.5, 0.5);
gl.Vertex(0.5, 0.5);
gl.Vertex(0.5, -0.5);
}
gl.End();
//定义在右上角的区域
gl.Color(0.0, 0.0, 1.0);
gl.Viewport(300, 300, 300, 300);
gl.Begin(OpenGL.GL_POLYGON);
{
gl.Vertex(-0.5, -0.5);
gl.Vertex(-0.5, 0.5);
gl.Vertex(0.5, 0.5);
gl.Vertex(0.5, -0.5);
}
gl.End();
//定义在左上角的区域
gl.Color(1.0, 0.0, 0.0);
gl.Viewport(0, 300, 300, 200);
gl.Begin(OpenGL.GL_POLYGON);
{
gl.Vertex(-0.5, -0.5);
gl.Vertex(-0.5, 0.5);
gl.Vertex(0.5, 0.5);
gl.Vertex(0.5, -0.5);
}
gl.End();
//定义在右下角
gl.Color(1.0, 1.0, 1.0);
gl.Viewport(200, 0, 200, 200);
gl.Begin(OpenGL.GL_POLYGON);
{
gl.Vertex(-0.5, -0.5);
gl.Vertex(-0.5, 0.5);
gl.Vertex(0.5, 0.5);
gl.Vertex(0.5, -0.5);
}
gl.End();
gl.Flush();
}
private void openGLControl_OpenGLInitialized(object sender, EventArgs e)
{
OpenGL gl = openGLControl.OpenGL;
gl.ClearColor(0, 0, 0, 0);
}
private void openGLControl_Resized(object sender, EventArgs e)
{
OpenGL gl = openGLControl.OpenGL;
gl.MatrixMode(OpenGL.GL_PROJECTION);
gl.LoadIdentity();
gl.Ortho2D(-1.0, 1.0, -1.0, 1.0);
gl.MatrixMode(OpenGL.GL_MODELVIEW);
}
}
}