【问题标题】:Intensive graphics application in C# (with .NET/Mono)C# 中的密集图形应用程序(使用 .NET/Mono)
【发布时间】:2026-01-12 21:45:02
【问题描述】:

如果您正在用 C# 编写一个 2d 图形密集型应用程序(如动画软件或具有自动图形控制的音乐音序器),哪个图形库更适合选择?

我想开发一个跨平台应用程序(至少在 Windows 7、Linux 上可移植),并且我想只使用 C#,避免在 C++ 中混合代码(也由于互操作问题)。

我已经尝试过 OpenTK,但它缺乏文档,而且它似乎不是很稳定(使用 Mono 它有时会使我的 X 服务器崩溃!!!)...也许我错了,但我觉得它不是一个长期支持的库,它会死......

对于 .NET/Mono 是否有良好且稳定的 OpenGL 包装器?

我知道在 Mono (Moonlight) 上有一个 Silverlight 的移植,但我读到它的性能很差。

谢谢。

【问题讨论】:

  • 不同意您对 OpenTK 的解释。几乎不需要文档,它是一个非常纤薄的包装器,几乎没有/没有陷阱。它正在积极开发和改进(+瘦身!),尽管根据我的经验,它足够稳定,不需要积极支持。我将 Mono 与 OpenTK + Windows.Forms 一起使用,问题很少,尽管 Mono 在某些事情上非常不稳定。
  • @Rushyo:也许我的问题是我对 OpenGL 的经验很差,我几乎猜不出它的方法应该实现哪些类:-/ 但例如,我发现很难找到一种编写方法一些使用 OpenTK 的文本。如果我学习了 OpenGL 基础(在 C++ 中)然后切换到 OpenTK 会怎样?这是个好主意吗?
  • 在 OpenGL 中编写文本至少可以说是一种痛苦。 OpenTK 实际上包括一个(非常过时的)名为“TextWriter”(IIRC)的类来帮助解决这个问题。 OpenGL 完全不提供这样的功能。看看这个:sjbaker.org/steve/omniv/opengl_text.html 不要把 'GLUT' 和其他类似的实用程序库误认为是 OpenGL。它们是附加功能。 OpenGL 是一个非常苗条的包。听起来你在寻找一个框架而不是一个包装器。 OpenTK 在旧版本中提供了比 OpenGL 更多的功能。随着它变得更薄,它逐渐提供相同的功能。

标签: c# .net opengl graphics mono


【解决方案1】:

irrlicht 库,但我们决定在我们的项目中使用 OpenTK。鄙视最新版本(1.0)的一些缺点,它在 Win7 上运行相当稳定,在 Linux 上也能运行。

【讨论】:

  • Irrlicht.Net 不再开发或支持,有一个名为 Irrilicht .NET CP (sourceforge.net/projects/irrlichtnetcp) 的新项目,但它似乎已经 2 年没有活动了! :-( ...OpenTK 似乎是最好的 .NET 选择。不是吗?
  • 我可以补充一点,我们将它用于 2D 地图应用程序,作为 GDI 的替代品,它的性能相当不错。
【解决方案2】:

您可以使用 SDL.NET,它是 Simple DirectMedia 层的 .NET 绑定,用于创建快速 2D 游戏的库。

另一种方式可能是 GTK#,但我不知道它的图形性能。

【讨论】:

  • 我已经快速尝试了 SDL.NET,我能够构建包含的示例,但启动它时出现致命错误!
  • 哪个错误?您是否正确安装了图形驱动程序?
  • “在执行本机代码时获得了 SIGSEGV。这通常表示单声道运行时或您的应用程序使用的本机库之一中存在致命错误。”。我的图形驱动程序安装正确,Compiz 运行正常,其他 3D 应用程序运行正常(在 Ubuntu Studio 10.04 64 位上)。
【解决方案3】:

现在,出于您的目的,我推荐MonoXNA

或者,CSGL(.NET/Mono 的 OpenGL 包装器)

【讨论】:

  • MonoXNA 网站活动(例如:monoxna.org/forum)和 TODO 列表让我觉得这个项目很好,但它还没有活着。多年来,CsGL 的开发已经停止。 Randy Ridge(作者)已经开始了一个名为 Tao 的新项目。不幸的是,陶项目似乎也死了。 :-(
  • 死项目有什么问题?正如它在 CsGL 上所说的那样,它可能已经变得尽可能好。
  • 你是对的,但问题是支持:如果我发现了一个新的错误或者我需要就某事提出问题怎么办?我喜欢将我的软件建立在一个活跃的项目上,主要是当我不是相关主题的专家时。
  • 很公平。我认为这有点过于谨慎,但我猜这是你的项目。
【解决方案4】:

我已经有一段时间没有研究使用 .NET 进行跨平台游戏了,但当我考虑这样做时,Unity Game Development Tool 看起来很有吸引力。我猜他们在底层使用的是 OpenGL,我不知道 Unity 究竟是在提供自己的图形 API,还是更多地为游戏开发提供一套集成工具。如果您以前没有看过它,但值得一看。

【讨论】:

    【解决方案5】:

    既然您正在寻找活跃且受支持的东西,那么Qt 怎么样?它有.NET support。这不是我个人使用的东西,但它们肯定已经存在了很长时间。

    【讨论】:

      【解决方案6】:

      如果你真的需要 3D,我只会考虑 OpenGL。你看过开罗吗?此外,据我所知,System.Drawing 在 mono + gtk 上的效果与在带有 .Net 的 windows 上一样好。

      如果你热衷于你可以尝试 Moonlight.Desktop,稳定版与 silverlight 2.0 控件配合得很好,beta 版支持 silverlight 3.0 和一些 4.0,我已经制作了一些在单声道中像这样工作的小应用程序在 linux 和 windows 上,但是有一些手动修改构建脚本来构建我的项目。

      除非你有理由不这样做,否则我会尝试在 Windows 上做一个基本的 silverlight 桌面应用程序,并为 linux/mono 提供一个 gtk# shell,同时始终保持核心(模型 + 控制器)装配项目的构建适用于两个平台。

      【讨论】:

      【解决方案7】:

      Csgl 非常稳定...
      ...因为它不再开发了。

      我真的推荐TAO Framework。它是跨平台(linux、mac os、windows)并且仍在开发中。它非常庞大,具有很多功能。

      Irrlicht 和 (mono-)Xna 专为文字游戏而设计。

      【讨论】: