【问题标题】:Using OpenGl with C#? [closed]在 C# 中使用 OpenGL? [关闭]
【发布时间】:2009-02-11 09:22:53
【问题描述】:

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

C# 是否为 OpenGL 提供类?

【问题讨论】:

  • 我知道这是一个非常古老的线程,但您可能会对Unity 感兴趣

标签: c# opengl


【解决方案1】:

OpenTK 是对 Tao API 的改进,因为它使用具有重载、强类型枚举、异常和标准 .NET 类型的惯用 C# 样式:

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

相对于仅仅反映 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

这使得移植更加困难,但使用起来非常好。

作为奖励,它提供字体渲染、纹理加载、输入处理、音频、数学...

2016 年 1 月 18 日更新:今天,OpenTK 维护者拥有stepped away from the project,其未来不确定。论坛充满了垃圾邮件。维护者建议迁移到 MonoGame 或 SDL2#。

2020 年 6 月 30 日更新:OpenTK 已经有了新的维护者一段时间,并且拥有一个活跃的不和谐社区。所以之前使用其他库的建议不一定正确。

【讨论】:

  • 我不认为这些函数很有代表性,因为它们都已被弃用并从 OpenGL 核心配置文件中删除。
  • 没错,这些功能已从核心配置文件中删除。但论据仍然有效。 “OpenTK 是对 Tao API 的改进,因为它使用惯用的 C# 风格以及重载、强类型枚举、异常和标准 .NET 类型”
  • 链接的网站现在对该帖子无效。
  • 另外还有一个从 OpenTK 衍生出来的 Silk.NET,它做了许多原始的事情以及一些新的绑定:github.com/dotnet/Silk.NET
【解决方案2】:

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

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

不幸的是,您需要为您调用的每个 OpenGL 函数执行此操作,这基本上是 Tao 为您所做的。

【讨论】:

【解决方案3】:

Tao 应该是一个不错的框架。

来自他们的网站:

.NET 的 Tao 框架是一个绑定的集合,以方便 跨平台媒体应用开发利用 .NET 和 Mono 平台。

【讨论】:

【解决方案4】:

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

【讨论】:

    【解决方案5】:

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

    他遗漏的是必须先创建上下文,然后才能使用任何 OpenGL 函数。这并不难,但几乎没有其他不那么直观的 DllImports 需要完成。

    我在 VS2012 中创建了一个示例 C# 项目,几乎是让 OpenGL 在 Windows 机器上运行所需的最低要求。它只会将窗口涂成蓝色,但它应该足以让您入门。该示例可以在http://www.glinos-labs.org/?q=programming-opengl-csharp 找到。在底部查找 No Wrapper 示例。

    【讨论】:

    • 您的链接已失效,请您分享您的项目。谢谢。
    【解决方案6】:

    我还推荐Tao Framework。但还有一点需要注意:

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

    【讨论】:

    • 我不知道 Tao 发生了什么事,因为页面在很久以前就关闭了。
    • 淘的新网址是:Tao Framework
    • 道似乎是一个移动的目标。我更新了链接,因为它现在也从 mono 转移到了 sourceforge。
    • 哇,2005 年 11 月……OpenGL 变化不大吗?
    • @JonHarrop 是的,看起来他们现在还没有使用 github 页面设置重定向opentk.github.io
    【解决方案7】:

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

    【讨论】:

    • 在什么命名空间中可以找到这些类?
    • OpenGL 不是 .NET 的一部分,从 4.0 版开始
    • @MegaByte 必须通过平台调用访问。
    【解决方案8】:

    关于 XNA 与 OpenGL 的选择(我知道有点离题,但因为它是较早提出的),在某些情况下使用 OpenGL 而不是 XNA(以及在其他 XNA 中而不是 OpenGL...)可能是有益的.

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

    附带说明的是,WebGL 基于 OpenGL ES3 afaik...

    进一步说明,这些不是唯一的考虑因素,但它们可能会让某些人更容易选择......

    【讨论】:

      【解决方案9】:

      XNA 2.0 至少需要着色器 1.1 卡。虽然旧技术,但不是每个人都有。一些较新的笔记本电脑(根据我们的经验,配备英特尔显卡的东芝平板电脑)不支持着色器 1.1。 XNA 根本无法在这些机器上运行。

      这对我们来说是一个重大问题,我们已转向 Tao 和 OpenGL。再加上 Tao,我们绑定了音频和 Lua 支持。

      【讨论】:

        猜你喜欢
        • 2012-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-17
        • 1970-01-01
        • 1970-01-01
        • 2011-04-22
        相关资源
        最近更新 更多