这个问题类似于the one here,但我觉得推荐的答案(如Tao和OpenTK)还不够好,因为它们只是从OpenGL直接端口,没有OOP设计,很难使用。
我正在寻找的是一个.Net的OpenGL Package 器,是写在明确的面向对象的原则,易于使用(易于应用文本和照明,易于调试等),能够用鼠标旋转3D图(一个功能,是严重缺乏OpenGL和TAO),并能够导出到其他文件格式(如dwg或dxf或谷歌Map文件格式)。
有什么建议吗?开源或商业组件都可以。
这个问题类似于the one here,但我觉得推荐的答案(如Tao和OpenTK)还不够好,因为它们只是从OpenGL直接端口,没有OOP设计,很难使用。
我正在寻找的是一个.Net的OpenGL Package 器,是写在明确的面向对象的原则,易于使用(易于应用文本和照明,易于调试等),能够用鼠标旋转3D图(一个功能,是严重缺乏OpenGL和TAO),并能够导出到其他文件格式(如dwg或dxf或谷歌Map文件格式)。
有什么建议吗?开源或商业组件都可以。
5条答案
按热度按时间muk1a3rh1#
虽然您认为OOP Package 器是可行的,但事实是您首先需要了解OpenGL是如何工作的(任何 Package 器API都是如此,OpenGL更是如此)。由于您发现OpenGL API很难使用,因此您可能对渲染的了解也不足以使用任何 Package 器API。
大多数 Package 器都避免使用繁重的类框架,因为为每个对象存储状态并将其发送到GPU是非常低效的,而且会降低帧速率。作为程序员,您需要意识到这些痛点,而不是试图将它们隐藏在抽象的 Package 器层后面。库设计人员无法为您解决这些问题。
i86rm4rw2#
看一看
o0lyfsai3#
最大的问题是OpenGL不是一个面向对象的框架,它是一个状态机(http://en.wikipedia.org/wiki/Finite-state_machine),因为任何对面向对象库的转换都会增加很多复杂性,这会降低你的程序。所以要么把它用作一个状态机,要么看看像OGRE这样的面向对象库。但是在很多方面OGRE会限制太多。
归根结底,你为什么需要OpenGL的OOP呢?这个函数库是这样写的,这是有原因的,那就是它非常清晰地Map到它下面的硬件。显卡不考虑OOP,它是一个状态机,用来编程的函数库反映了这一点。
n7taea2i4#
也许太自大了,但是我正在写我自己的抽象。它在大多数时候都能工作,但是它还处于计划状态,但是它给了你一个如何实现“OpenGL”OOP抽象的想法。
查看SVN:http://sourceforge.net/projects/genomalib/develop
当然这不是一个生产代码的解决方案,但它是开源的,一旦你得到了设计,很容易扩展。最近我添加了“弃用”API,因为它最初是为着色器渲染而写的(实际上它仍然缺少对“旧”硬件的支持);但我肯定有足够的资金。
s8vozzvw5#
ShapGL是Winforms和WPF中最好的,也是最容易使用的。https://github.com/dwmkerr/sharpgl