基于.NET的3D开发框架/工具比较
- 好久木有写博客了,这么日子以来忙忙碌碌的,也没大有时间潜心学习和梳理。最近刚好接手一个3D显示的活,虽然还没怎么弄明白,但是也看过一些方案,走了一些弯路,经过一些浅显的了解(3D Display这里面水太深),说说我个人的看法吧。
1.目标
项目的主要工作是能够接受从核心模块得来的数据(已经对原始的工程数据进行处理,包括进行坐标转化、归一化等)并将点云数据进行展示,核心是通过C++写的,然后我负责的外围,没有硬性的语言要求。
2.方案
我觉得应该想办法使用C#来实现这个显示展示问题。经过简单的寻找,大体比较靠谱的有这么些:
- XNA/MONOGAME
- Silverlight
- SharpGL/SharpDX/OpenTK
- WPF
首先从本质上来说,3D显示到底层都是调用DirectX或者OpenGL(不考虑软件加速),上面的这些只是对他们包装的层次不同而已。接下来看看应用场景:
XNA/MONOGAME: 提供了一个较完整的渲染管线,操作3D模型很容易,比较适合于3D的游戏的开发,然后还有一点就是我做这个开发的时候,没看见鼠标在哪,难道不支持?值得关注的是,据我所知,XNA不支持WINFORM/WPF控件!(学了一点而已,不深入)
Silverlight:作为一个客户端的程序运行,适用于构建RIA程序(P.S. 虽然小光酱已经不是微软的开发方向了…),核心3D显示功能是基于XNA的,就是继承结构不一样而已,值得一说的是,这个可以实现运用普通的WPF控件实现对3D图形的控制。
SharpGL/SharpDX/OpenTK:这些都是对底层DirectX或者OpenGL的.NET封装,肯定是可以实现所需要的功能的,不过由于是对底层的封装,使用起来较XNA还是有些难度。
WPF:显示是基于DirectX的,内建支持3D功能的展示,操作方式和xna有一些不同,不过支持原生的WPF控件。
3.小结
从上面的简单对比,可以发现,如果有时间的话,通过SharpGL这一类方法会比较适合于从底层开始开发,通过WPF会比较适合于我的应用场景;由于XNA与Silverlight不再受微软力推,最好也暂停一下,观望观望(当然从学习的角度来说,学了就是自己的,融会贯通,不会白学)。
由于最初没有做一个横向的对比,我直接用的XNA进行的开发。结果,手下人折腾了半天,告诉我搞不出来,回头还要重做,耽误了很多时间,以后动手之前还是需要先动脑,应引以为戒。
P.S. 微软的开发者中心http://msdn.microsoft.com/library/windows/desktop/dn614993.aspx上对开发技术做了对比,做graphics-rich程序,微软还是推荐用C++