在C#中使用OpenGl?[关闭]


118

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

C#是否为OpenGL提供类?


我知道这是一个非常古老的主题,但是Unity可能会让您感兴趣
clabe45 '17

Answers:


129

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已有一段时间了新的维护者,并且拥有活跃的不和谐社区。因此,先前使用其他库的建议不一定正确。


5
我认为这些功能不是很有代表性,因为它们已被弃用,并已从OpenGl核心配置文件中删除。
Arne 2013年

6
是的,这些功能已从核心配置文件中删除。但是论点仍然有效。“ OpenTK是对Tao API的改进,因为它使用了惯用的C#样式,具有重载,强类型的枚举,异常和标准.NET类型”
Syaiful Nizam Yahya 2013年

1
链接的网站现在对此职位无效。
桑尼·查尔兹

16

我认为@korona的意思是,由于它只是一个C API,因此您可以直接从C#中使用它,只需大量输入即可,如下所示:

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

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


在Linux(带有mono)上,您将如何处理?
deceleratedcaviar


15

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

从他们的网站:

.NET的Tao框架是绑定的集合,以促进利用.NET和Mono平台进行跨平台媒体应用程序开发。


1
Tao的新网站是:Tao框架
Thymine

9

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


7

您可以不使用包装器就使用OpenGL,并在C#中原生使用它。就像Je​​ff Mc所说的那样,您将必须使用DllImport导入所需的所有功能。

他剩下的就是必须创建上下文,然后才能使用任何OpenGL函数。这并不难,但几乎没有其他需要做的不太直观的DllImports。

我在VS2012中创建了一个示例C#项目,几乎具有使OpenGL在Windows框上运行所需的最低限度。它只会将窗口涂成蓝色,但足以让您入门。可以在http://www.glinos-labs.org/?q=programming-opengl-csharp中找到该示例。在底部查找“ 无包装器”示例。


5
您的链接已失效,请您分享您的项目。谢谢。
dangerousdave

7

我还建议使用Tao框架。但要注意一点:

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


我不知道Tao发生了什么事,因为页面不久前就掉下来了。
多米尼克K

Tao的新网站是:Tao框架
Thymine

1
陶似乎是一个移动的目标。我更新了链接,因为它也从现在的mono移到了sourceforge。
奥利弗·

哇,2005年11月... OpenGL变化不大吗?
jocull 2012年

1
@JonHarrop是的,看起来他们还没有使用github页面
Dreamwalker

4

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


这些类可以在哪个命名空间中找到?
MegaByte

4
从4.0版开始,OpenGL不属于.NET的一部分
mafu 2011年

3
@MegaByte必须通过平台调用来访问它们。
有限赎罪

2

关于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 ...

还要注意的是,这些并不是唯一的考虑因素,但是对于某些人来说,它们可能会使选择更加容易。


1

XNA 2.0至少需要一个着色器1.1卡。虽然是旧技术,但并不是每个人都有。一些较新的笔记本电脑(根据我们的经验,使用具有Intel图形功能的Toshiba平板电脑)不支持shader 1.1。XNA根本不会在这些机器上运行。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.