小智 126
OpenTK是对Tao API的改进,因为它使用惯用的C#样式,包括重载,强类型枚举,异常和标准.NET类型:
GL.Begin(BeginMode.Points);
GL.Color3(Color.Yellow);
GL.Vertex3(Vector3.Up);
Run Code Online (Sandbox Code Playgroud)
与仅反映C API的Tao相反:
Gl.glBegin(Gl.GL_POINTS); // double "gl" prefix
Gl.glColor3ub(255, 255, 0); // have to pass RGB values as separate args
Gl.glVertex3f(0, 1, 0); // explicit "f" qualifier
Run Code Online (Sandbox Code Playgroud)
这使得移植更难,但使用起来非常好.
作为奖励,它提供字体渲染,纹理加载,输入处理,音频,数学......
更新18.1.2016:今天,OpenTK维护者已经离开了项目,使其未来不确定.论坛充斥着垃圾邮件.维护者建议转移到MonoGame或SDL2#.
Jef*_* Mc 16
我认为@korona的意思是因为它只是一个C API,你可以直接使用C#直接消费它,如下所示:
[DllImport("opengl32")]
public static extern void glVertex3f(float x, float y, float z);
Run Code Online (Sandbox Code Playgroud)
不幸的是,您需要为您调用的每个OpenGL函数执行此操作,这基本上就是Tao为您所做的事情.
小智 7
你可以在没有包装器的情况下使用OpenGL,并在C#中原生使用它.正如Jeff Mc所说,你必须使用DllImport导入你需要的所有功能.
他遗漏的是在使用任何OpenGL函数之前必须创建上下文.这并不难,但还有其他一些不那么直观的DllImports需要完成.
我在VS2012中创建了一个示例C#项目,几乎是在Windows上运行OpenGL所需的最低限度.它只将窗口涂成蓝色,但它应该足以让你开始.该示例可以在http://www.glinos-labs.org/?q=programming-opengl-csharp找到.在底部查找No Wrapper示例.
您希望这些支持库做什么?仅仅从 C# 使用 OpenGL 就足够简单了,而且不需要任何额外的库。