最近才发现,很久以前 .NET 版本的 OpenGL 就出来了,并且版本已经升到了1.4.1 了。下载下来安装后写了第一个小程序。
csgl.native.dll 和 csgl.dll 两个文件拷贝到 %SystemRoot%/System32/ 中。
解决方案中添加 csgl.dll 的引用。
运行后屏幕截图为:

程序代码为:
using
System;
using
System.Windows.Forms;
using
System.Drawing;
using
CsGL.OpenGL;
using
CsGL.Util;

namespace
TestOpenGL

...
{

/**//// <summary>
///
/// ** .NET(C#) 中使用 CsGL-OpenGL .NET**
///
/// File: FirstOpenGL.cs
///
/// Author: 周振兴 (Zxjay 飘遥)
///
/// E-Mail: tda7264@163.com
///
/// Date: 07-05-23
///
/// Blog: http://blog.youkuaiyun.com/zxjay
///
/// </summary>
public class FirstOpenGl : Form

...{

/**//// <summary>
/// FirstOpenGl 的构造方法
/// </summary>
public FirstOpenGl()

...{
this.Text = "First OpenGL!";
this.MaximizeBox = false;
this.FormBorderStyle = FormBorderStyle.Fixed3D;
this.Size = new Size(400, 420);
}


/**//// <summary>
/// 初始化 Bitmap
/// </summary>
/// <returns> Bitmap </returns>
private Bitmap InitBitMap()

...{
Bitmap bmp = new Bitmap(400, 400);
Graphics g = Graphics.FromImage(bmp);
GDIGLContext gdictxt = new GDIGLContext(g);

gdictxt.Create(new DisplayType(DisplayFlags.DRAW_TO_BITMAP, true), null);
gdictxt.Grab();

GLTest gl = new GLTest();
gl.Init();
gl.Draw();
GL.glFinish();

gdictxt.Dispose();
g.Dispose();

return bmp;
}


/**//// <summary>
/// 重写 Form 的 OnPaint 方法,在其上绘制位图
/// </summary>
/// <param name="e"></param>
protected override void OnPaint(PaintEventArgs e)

...{
Graphics g = e.Graphics;
g.DrawImage(InitBitMap(), new Rectangle(0, 0, 400, 400));
base.OnPaint(e);
}


/**//// <summary>
/// 程序的入口
/// </summary>
public static void Main()

...{
FirstOpenGl fog = new FirstOpenGl();
Application.Run(fog);
}
}



/**//// <summary>
/// 继承自 System.Object/OSLib/OpenGL/OpenGL_Extension/GLU/GLUT/GL
/// </summary>
public class GLTest : GL

...{
public void Init()

...{
glMatrixMode(GL_PROJECTION);
gluOrtho2D(-10.0, 10.0, -10.0, 10.0);
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glColor3f(1.0f, 0, 0);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glClear(GL_COLOR_BUFFER_BIT);
glShadeModel(GL_SMOOTH);
}


/**//// <summary>
/// 绘制位图
/// </summary>
public void Draw()

...{
const int NUMBER = 12;
const int RADIUS = 8;
double PI = 3.1415;
PointF[] pt = new PointF[NUMBER];

for (int i = 0; i < NUMBER; i++)

...{
pt[i].X = (float)(RADIUS * Math.Cos(PI / NUMBER + 2 * PI * i / NUMBER));
pt[i].Y = (float)(RADIUS * Math.Sin(PI / NUMBER + 2 * PI * i / NUMBER));
}

for (int i = 0; i < NUMBER; i++)
for (int j = i + 1; j < NUMBER; j++)

...{
glBegin(GL_LINES);
glVertex2f(pt[i].X, pt[i].Y);
glVertex2f(pt[j].X, pt[j].Y);
glEnd();
}
glFlush();
}

}
}
从代码可以看出,Cs-OpenGL 作简单的二维图形不如直接用 GDI+ 简单直观,但其长处是做三维图形,这是 GDI+ 无可比拟的!