C#中的密集图形应用(使用.NET/Mono)

9
如果你要在C#中编写一个2D图形密集型应用程序(如动画软件或具有自动化图形控制的音乐序列器),哪种图形库是更好的选择?
我想开发一个跨平台应用程序(至少可在Windows 7,Linux上运行),并且我想只使用C#,避免混合C ++代码(也由于Interop问题)。
我已经尝试过OpenTK,但它缺乏文档,并且似乎不太稳定(使用Mono时,有时会使我崩溃X服务器!)...也许我错了,但我感觉它不是一个长期受支持的库,它即将消亡...
是否有.NET / Mono的良好稳定的OpenGL包装器?
我知道Silverlight在Mono上有一个移植版(Moonlight),但我读到它的性能很差。
谢谢。

不同意你对OpenTK的解释。文档几乎是不需要的,它只是一个非常简单的包装器,没有什么陷阱。它正在积极地开发和改进(并且变得更加轻巧!),尽管在我的经验中,它已经足够稳定,不需要主动支持。我使用带有OpenTK + Windows.Forms的Mono,遇到了一些问题,尽管在某些方面,Mono相当不稳定。 - Rushyo
@Rushyo: 也许我的问题在于我对OpenGL的经验不足,我几乎无法猜测它的方法应该实现哪些类 :-/ 但是例如,我发现很难找到使用OpenTK编写文本的方法。 如果我先学习OpenGL基础(用C++),然后再转向OpenTK,这样做是否是个好主意? - Kill KRT
1
在OpenGL中编写文本是一件非常痛苦的事情。OpenTK实际上包括一个(非常过时的)名为'TextWriter'的类(如果我没记错的话),以帮助解决这个问题。OpenGL绝对不提供此类功能。看看这个:http://www.sjbaker.org/steve/omniv/opengl_text.html不要将“GLUT”和其他类似的实用程序库误认为是OpenGL。它们是附加组件。OpenGL是一个非常简单的软件包。听起来你需要的是一个框架而不是一个包装器。旧版本的OpenTK提供比OpenGL更多的功能。随着OpenTK变得更加简洁,它逐渐提供相同的功能。 - Rushyo
7个回答

3

虽然有irrlicht库可用,但我们决定在项目中使用OpenTK。尽管最新版本(1.0)存在一些缺点,但它在Win7上非常稳定,并且在Linux上也可以使用。


1
Irrlicht.Net 不再得到开发或支持,现在有一个名为 Irrilicht .NET CP 的新项目(http://sourceforge.net/projects/irrlichtnetcp/),但它似乎自两年前以来就不活跃了!:-( ...看起来 OpenTK 是最好的 .NET 选择。不是吗? - Kill KRT
我可以补充说,我们将其用作2D地图应用程序的替代品,以取代GDI,并且它表现得非常出色。 - jethro

1

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

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


我迅速尝试了SDL.NET,我能够构建包含的示例,但是启动它时出现致命错误! - Kill KRT
哪个错误?您的图形驱动程序是否已正确安装? - codymanix
在执行本地代码时收到了SIGSEGV。这通常表示mono运行时或应用程序使用的本地库中存在致命错误。我的图形驱动程序已正确安装,Compiz正常运行,并且其他3D应用程序也可以正确运行(在Ubuntu Studio 10.04 64位上)。 - Kill KRT

0

目前,针对您的需求,我建议使用MonoXNA

或者,CSGL(.NET/Mono的OpenGL包装器)也是一个选择。


MonoXNA网站的活动(例如:http://www.monoxna.org/forum)和待办事项清单让我认为这个项目很好,但它现在已经不再活跃了。CsGL的开发已经停止多年。作者Randy Ridge已经开始了一个名为Tao的新项目。不幸的是,Tao项目似乎也已经死亡了。 :-( - Kill KRT
死亡项目有什么问题吗?就像CsGL上所说的那样,它可能已经达到了最好的状态。 - Antony Woods
1
你说得没错,但问题在于支持:如果我发现了一个新的 bug 或者需要询问关于某些事情的问题怎么办?我喜欢基于一个活跃的项目来开发软件,尤其是当我对相关主题不是很熟悉时。 - Kill KRT
好的,我认为这有点过于谨慎了,但这是你的项目,我想。 - Antony Woods

0

我已经有一段时间没有研究使用.NET进行跨平台游戏开发了,但是当我考虑这样做时,Unity游戏开发工具看起来非常吸引人。我猜想在底层它们正在使用OpenGL,而我不确定Unity在提供自己的图形API方面处于什么地位,或者更多地是为游戏开发提供一套集成工具。如果你以前没有研究过它,那么值得一看。


0

既然您正在寻找一些活跃且受支持的东西,那么Qt如何?它有.NET支持。虽然我个人没有使用过,但它们肯定已经存在很长时间了。


0

如果你真的需要3D,我只会考虑OpenGL。你看过Cairo吗?另外,据我所知,System.Drawing在mono + gtk上和在.Net上的Windows一样好用。

如果你有兴趣,可以尝试Moonlight.Desktop,稳定版本与silverlight 2.0控件相当兼容,beta版支持silverlight 3.0和4.0中的一些控件。我已经在Linux和Windows上使用mono制作了许多小应用程序,但是需要手动修改构建脚本才能构建项目。

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


由于我的应用程序需要复杂的图形控件(并在实时自动化中使用,例如:http://pouvoir-choisir.org/logiciel-libre/public/blender_screenshot.png或http:// media.createdigitalmedia.net/cdmu/images//2007/06/thor.jpg),我认为我需要最大的性能,并且我知道C#不是最好的选择(但我想避免C++及其“不纯”的面向对象实现),因此我正在考虑使用OpenGL(编写自定义GUI工具包)...嗯,我知道这有点困难! - Kill KRT

0

Csgl非常稳定...
...因为它已经不再继续开发。

我真的推荐TAO Framework。它是跨平台的(Linux、Mac OS、Windows),而且仍在继续开发。它非常庞大,具有很多特性。

Irrlicht和(mono-)Xna都是为了编写游戏而设计的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接