Answers:
OpenTK是对Tao API的改进,因为它使用了惯用的C#样式以及重载,强类型的枚举,异常和标准.NET类型:
GL.Begin(BeginMode.Points);
GL.Color3(Color.Yellow);
GL.Vertex3(Vector3.Up);
与Tao只是镜像C API相反:
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
这使移植更加困难,但是使用起来非常好。
作为奖励,它提供字体渲染,纹理加载,输入处理,音频,数学...
2016年1月18日更新:今天,OpenTK维护者已退出该项目,因此其前途未卜。论坛中充斥着垃圾邮件。维护者建议移至MonoGame或SDL2#。
2020年6月30日更新:OpenTK已有一段时间了新的维护者,并且拥有活跃的不和谐社区。因此,先前使用其他库的建议不一定正确。
我认为@korona的意思是,由于它只是一个C API,因此您可以直接从C#中使用它,只需大量输入即可,如下所示:
[DllImport("opengl32")]
public static extern void glVertex3f(float x, float y, float z);
不幸的是,您将需要为调用的每个OpenGL函数执行此操作,这基本上是Tao为您完成的工作。
您可以不使用包装器就使用OpenGL,并在C#中原生使用它。就像Jeff Mc所说的那样,您将必须使用DllImport导入所需的所有功能。
他剩下的就是必须创建上下文,然后才能使用任何OpenGL函数。这并不难,但几乎没有其他需要做的不太直观的DllImports。
我在VS2012中创建了一个示例C#项目,几乎具有使OpenGL在Windows框上运行所需的最低限度。它只会将窗口涂成蓝色,但足以让您入门。可以在http://www.glinos-labs.org/?q=programming-opengl-csharp中找到该示例。在底部查找“ 无包装器”示例。
我还建议使用Tao框架。但要注意一点:
看看这些教程:http : //www.taumuon.co.uk/jabuka/
您希望这些支持库做什么?仅使用C#中的OpenGL就足够简单,不需要任何其他库afaik。
关于XNA与OpenGL的选择(我知道有点不对,但自从它提出以来,就有点不对了),在某些情况下,最好使用OpenGL而不是XNA(在其他XNA而不是OpenGL ...中)。
如果要使用Mono在Linux或Mac上运行应用程序,则使用OpenGL可能是一个不错的选择。另外,我认为这还没有广为人知,如果您有客户要在Citrix环境中运行应用程序,那么DirectX / Direct3D / XNA不会像OpenGL那样经济。原因是与DirectX / XNA应用程序相比,与DirectX / XNA应用程序相比,OpenGL应用程序可以在较少数量的服务器上共托管(由于性能问题,单个服务器不能承载无限数量的应用程序实例)加速模式。存在其他要求,例如支持的图形卡等,但我将继续讨论XNA与OpenGL的问题。作为IT架构师,软件开发人员等,必须在OpenGL和DirectX / XNA之间进行选择之前将其考虑在内。
附带说明的是,WebGL基于OpenGL ES3 afaik ...
还要注意的是,这些并不是唯一的考虑因素,但是对于某些人来说,它们可能会使选择更加容易。