在 C # 中使用 OpenGl? ?

C # 是否有免费的 OpenGL 支持库?如果是这样,我应该使用哪一个,在哪里可以找到示例项目?

C # 是否为 OpenGL 提供类?

174285 次浏览

您希望这些支持库做什么?仅仅使用 C # 中的 OpenGL 就足够简单了,而且不需要任何附加库。

Tao is supposed to be a nice framework.

From their site:

TaoFrameworkfor.NET 是一个便于使用的绑定集合 cross-platform media application development utilizing .NET 和 Mono 平台。

我也推荐 道框架,但是还有一点要注意:

看看这些教程: Http://www.taumuon.co.uk/jabuka/

XNA 2.0至少需要一个着色器1.1卡。虽然是老技术,但不是每个人都有。一些较新的笔记本电脑(在我们的经验中,东芝平板电脑与英特尔图形)没有着色器1.1的支持。XNA 不能在这些机器上运行。

这对我们来说是一个重要的问题,我们已经转向 Tao 和 OpenGL。另外,我们有与 Tao 绑定的音频和 Lua 支持。

我认为@korona 的意思是,因为它只是一个 C API,你可以直接从 C # 使用它,只需要像下面这样大量输入:

[DllImport("opengl32")]
public static extern void glVertex3f(float x, float y, float z);

You unfortunately would need to do this for every single OpenGL function you call, and is basically what Tao has done for you.

OpenTK 是对 Tao API 的改进,因为它使用了惯用的 C # 风格,带有重载、强类型枚举、异常和标准。NET 类型:

GL.Begin(BeginMode.Points);
GL.Color3(Color.Yellow);
GL.Vertex3(Vector3.Up);

as opposed to Tao which merely mirrors the 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 已经有了新的维护者一段时间了,并且有一个活跃的不和谐社区。因此,以前关于使用另一个库的建议不一定正确。

SharpGL 是一个允许您在 Windows 窗体或 WPF 应用程序中使用 OpenGL 的项目。

您可以在没有包装器的情况下使用 OpenGL,并在 C # 中本机使用它。 正如 Jeff Mc 所说,您必须导入 DllImport 所需的所有函数。

他遗漏的是在使用任何 OpenGL 函数之前必须创建上下文。这并不难,但是还有一些其他不那么直观的 DllImport 需要完成。

我已经在 VS2012中创建了一个示例 C # 项目,其中几乎只有在 Windows 框中运行 OpenGL 所必需的最低限度。它只能把窗户漆成蓝色,但应该足够让你开始工作了。示例可以在 http://www.glinos-labs.org/?q=programming-opengl-csharp中找到。查找底部的 没有包装纸示例。

Concerning the (somewhat off topic I know but since it was brought up earlier) XNA vs OpenGL choice, it might be beneficial in several cases to go with OpenGL instead of XNA (and in other XNA instead of OpenGL...).

如果您打算使用 Mono 在 Linux 或 Mac 上运行应用程序,那么使用 OpenGL 可能是一个不错的选择。另外,我认为,如果您的客户要在 Citrix 环境中运行您的应用程序,那么 DirectX/Direct3D/XNA 不会像 OpenGL 那样是一个经济的选择。原因是 OpenGL 应用程序可以共同托管在较少数量的服务器上(由于性能问题,一个服务器不能托管无限数量的应用程序实例) ,而 DirectX/XNA 应用程序需要专用的虚拟服务器以硬件加速模式运行。其他需求也存在,比如支持的图形卡等等,但是我将继续讨论 XNA 与 OpenGL 的问题。 作为 IT 架构师、软件开发人员等,在选择 OpenGL 和 DirectX/XNA 之前,必须考虑到这一点。

值得注意的是,WebGL 是基于 OpenGL ES3 afaik..。

作为进一步的说明,这些不是唯一的考虑,但他们可能使一些选择更容易..。