使用什么? Tao,SharpGL,OpenTK,DirectX P / Invoke,XNA,MDX,SlimDX,Windows API编解码器包
回到当天很容易, 你做了你自己的3D的东西,然后来了DirectX,然后来了OpenGL。 对于.Net开发人员来说,MDX很不错。 然后XNA接pipe了MDX,但它不一样。 XNA似乎非常以游戏为中心,所有的内容stream水线和固定模型和东西的预加载。
那么我们现在的立场呢? 经过几天的研究/试验和错误,我感到无处不在,我看到我发现一半开发的库,开销过大的库,严重的限制或过于复杂的库。
我想做“自由”3D的东西。 例如,在3D中在屏幕上显示200k点,并以30fps(Kinect深度图像)移动它们。 我想制作3D屏幕保护程序,audio分析插件等。所有这些都不是预制的内容pipe道,并且需要高性能。 (ehm)我想从.Net开始。
任何人都有图书馆的经验,很容易理解,还能给予相当的自由和速度?
我似乎登陆了OpenTK 。 我认为它或多或less地直接访问OpenGL API,并且不需要大量的依赖关系。
这比较容易理解。 它需要很less的(可以理解的)代码行来开始。 它并不支持我的对象,所以我可以自由地为每个传递改变任何东西,这很好,因为我主要使用不安全的指针指向内存。
把速度和易用性结合起来当然是困难的。 速度需要直接与3D API交谈,而易用性需要抽象。 因此,这必须被认为是比我尝试过的其他人更低的API。 如果我想做一些预制的angular色animation,那么XNA可能是一个更好的select,但是对于我的使用(上述)来说,这似乎是非常有前途的(4-5小时的黑客攻击)。
一些示例代码:
private void Render() { // Every frame GL.MatrixMode(MatrixMode.Modelview); GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); GL.LoadMatrix(ref cameraMatrix); GL.Begin(BeginMode.Points); // Here I can add lots of points. I add 200k without any big problem. // It seems these points could have been passed in as an array pointer too, // but I'll look at that later. GL.Vertex3(x2, y2, z2); GL.End(); glControl.SwapBuffers(); }
如果你喜欢MDX,SlimDX应该放在你的胡同里。 它基本上是MDX的替代品,但是有很多可疑的devise决定被修正了,并且包含了更多的function。 您使用MDX所做的任何事情,都会以某种forms出现在SlimDX中。
另外还有另外一个OpenGL的C#封装包:OpenGL DotNet。 对我很好! 在http://www.taylaninan.com/opengl-dotnet.php查看; 。
它将OpenGL包装到4.4版本,并支持550多种OpenGL扩展。 它还支持GLU,GLUT,FreeGLUT,DevIL(开发人员图像库),ILU和ILIL for DevIL。
它是上述库的低级API。
前段时间我们遇到了类似的问题,当然以下只代表我们的意见。 我们主要担心的一个问题是,这个库应该是多function的,可以生成质量非常好的免费3D图像,而不会对安装程序造成额外的限制,就像使用XNA一样,必须安装正确的文件。 这似乎是一个可能的头痛来源。 最后,我们决定使用DirectX,并在C#中编写GUI。 所有需要的3D交互都是使用wndproc完成的。 这为我们提供了DirectX的强大function以及用C#开发GUI的简易性。 我们并没有后悔。