.Net中的OpenGL Wrapper

时间:2010-04-27 09:44:09

标签: .net opengl

此问题与the one here类似。但我觉得推荐的答案(如Tao和OpenTK)不够好,因为它们只是OpenGL的直接端口,没有OOP设计,而且难以使用。

我正在寻找的是一个.Net OpenGL包装器,它以明确的OOP原则编写,易于使用(易于应用文本和照明,易于调试等),能够使用鼠标旋转3D图表(a OpenGL和TAO严重缺失的功能,以及导出为其他文件格式(如dwg或dxf或Google Map文件格式)的功能。

有什么建议吗?开源或商业组件都可以。

4 个答案:

答案 0 :(得分:4)

虽然你可以使用OOP包装器是正确的,但事实是你需要先了解OpenGL的工作原理(任何包装器API都是如此,对于OpenGL来说更是如此)。由于您发现OpenGL API难以使用,您可能无法理解渲染效果,也无法使用任何包装器API。

大多数包装器都避免使用繁重的类框架,因为为每个对象存储状态并将其发送到每个对象的GPU是非常低效的,并且可能会降低帧速率。程序员需要了解这些痛点,而不是试图将它们隐藏在抽象包装层后面。图书馆设计师无法为您解决这些问题。

答案 1 :(得分:2)

看看

答案 2 :(得分:2)

最大的问题是OpenGL不是一个OOP框架,它是一个状态机(http://en.wikipedia.org/wiki/Finite-state_machine),因此对OOP库的任何转换都会增加一些会降低程序速度的复杂性。所以要么将它用作状态机,要么像OGRE那样查看OOP库。但对于很多事情来说,OGRE的限制性太强了。

归结为它,为什么你需要使用OpenGL进行OOP?这个库的编写方式是有原因的,这是因为它非常干净地映射到它下面的硬件。图形卡在OOP中没有思考,它是一个状态机,用于编程的库反映了它。

答案 3 :(得分:1)

也许太傲慢了,但我正在写自己的抽象。它大部分时间都有效,但它处于规划状态,但是让您了解如何实现“OpenGL”OOP抽象。

查看SVN:http://sourceforge.net/projects/genomalib/develop

当然,它不是生产代码的解决方案,但它是开源的,并且在获得设计后易于扩展。我已经添加了“不赞成”的API,因为它最初只是用着色器进行渲染(实际上它仍然缺少对“旧”硬件的支持);但我肯定有渲染的基金......