2009年的OpenGL窗口库

5
尝试选择一个用于创建窗口和捕获用户输入的库,以供我的OpenGL应用程序使用,但是选择太多了。 GLUT已经过时了。我喜欢GLFW,但似乎无法在显示窗口之前设置窗口位置(我希望它居中,这样太过分了吗?),所以你会看到它出现然后移动,这让我很烦恼。此外,开发似乎也停滞了。SFML有一些不错的功能,但它使用事件轮询而不是回调,我更喜欢回调来进行解耦。我认为我不需要FLTK的所有GUI功能。SDL很慢(似乎没有利用GPU)。其他三个我不太了解(FreeGLUT、OpenGLUT、OGLWFW)。那么哪个是较小的恶?还有其他我没听说过的吗?
我只是想制作一个简单的2D游戏。我对OpenGL足够熟悉,不需要绘图例程,但如果它们被正确实现,我可能不会抱怨其他可能有用的函数。

目前看来,OGLWFW似乎只支持Win32。该网站表示计划支持Linux/Mac。如果许可证或跨平台支持是问题,您可能需要注意一下。 - greyfade
哦,我可能忽略了那个。跨平台很好...特别是因为我现在正在Ubuntu上开发。许可证只是一个小问题,因为我似乎从来没有完成任何事情...我从来没有达到能够销售它的地步。 - mpen
6个回答

8

SDL 允许您创建一个OpenGL上下文,该上下文可以加速(取决于驱动程序/硬件支持)。

我知道您标记为C ++,但是pygame(python)是用于创建2D游戏的优秀库,它还支持OpenGL上下文。Pygame是基于SDL构建的。

Clutter 是一个新的基于OpenGL的GUI库,具有Perl、Python、C#、C++、Vala和Ruby绑定。我自己没有使用过它。从网站上看:

Clutter使用OpenGL(并可选地使用OpenGL ES用于移动和嵌入式平台)进行渲染,但其API隐藏了开发人员的底层GL复杂性。 Clutter API旨在易于使用、高效和灵活。


SDL仍然像C一样(需要清理)并使用事件轮询而不是回调,并且似乎与OpenGL集成不太好(需要使用SDL包装函数?) - mpen
一旦你在pygame或SDL中设置了OpenGL上下文,你就可以使用任何你想要的OpenGL。我有一个OpenGL应用程序,基本上使用SDL进行窗口管理和事件轮询,使用OpenGL进行图形处理。 - Karl Voigtland
嗯,是的...我不是说它不起作用,只是需要更多的说服才能击败其他库。 - mpen
杂乱无章似乎相当令人困惑。 你知道有哪些开源程序是用clutter编写的吗? - the_drow
3
目前,我认为Clutter最高调的开源用户是英特尔Moblin Netbook操作系统:moblin.org。 - Karl Voigtland

7
GLUT和其他GLUT替代品不应在任何生产应用程序中使用。它们适用于快速制作演示应用程序或尝试某些内容,但不适合更多的应用场景。
如果您想制作OpenGL游戏,我建议使用SDL。它更注重游戏需求。它绝对可以与OpenGL一起使用。简短的谷歌搜索"SDL OpenGL"找到了一个关于如何使用SDL初始化OpenGL的链接。启用OpenGL也应该使GPU具有硬件渲染功能。
Qt是一个合理的替代选择,但如果您想将OpenGL嵌入较大的桌面应用程序(例如3D建模,CAD / CAM,医学可视化等),需要访问标准OS小部件以获取UI。

是啊... 但Qt看起来也更现代化和设计得更好!我的游戏将有一个编辑器... 我可以使用那些额外的小部件:p不过我将在未来的项目中考虑SDL。 - mpen

6

我建议使用Qt。它是一个很好的通用库并支持OpenGL。


对了...忘记了Qt。但是学习曲线陡峭,对吧?之前试着用过一次,完全搞不懂。 - mpen
嗯... 至少它自带的编辑器有些令人困惑。NetBeans 6.8似乎对Qt有一定的支持,因此启动一个简单的应用程序并不那么困难。 - mpen
我在Windows上使用Visual Studio和Qt,在*nix系统上使用Vim/make。它有非常好的文档和清晰的API。我认为有一些关于如何在IDE(如Eclipse/NetBeans等)中使用它的教程。只需在谷歌上搜索即可。 - Oleksandr Tymoshenko
1
现在已经有了一些简单的东西在运行了...开始真的很喜欢它 :) 它不仅有漂亮的回调函数...它们还神奇地为我注册好了。似乎强制你分离代码,这可能是一件好事,否则我可能已经搞砸了 :D - mpen

3
IF  "learning c++ part of what you're trying to achieve":
then
IF  "you only want to learn OpenGL with a fullscreen mode":
  USE GLUT //Because it's VERY VERY simple. You can get set up VERY quick
ELSE:
  USE QT //Great library, has many many things that will help you. It is portable, it has a nice API
ENDIF

IF "you don't need C++":
then
   USE Python //I recommend it, it is fast, no long link times, good api, omg I love this language

背景:

我曾尝试制作简单的2D游戏,一开始使用了C++和NeHe。当时我对OpenGL和C++一无所知(只有Java的背景)。这种语言让我很迷惑,OpenGL也是如此。所以这是一个非常艰难的学习曲线。

我不建议这样做,因为你可以使用动态语言(例如Python)获得更快的结果。所以几年后我开始学习Python。我用Python可以更快地让“旋转的立方体”运行起来。


1
我个人已经了解了C++和OpenGL,所以这不是问题。我只需要一个跨平台的窗口API。Qt上的所有其他细节都很好。 - mpen

3
在我们的C++课程中,我们在2008年使用ClanLib 0.8,在2009年使用ClanLib 2.1,效果非常不错。自从我们从SDL转换过来后,学生们的项目作品质量明显提高。但需要注意的是,2.1版本依然不完整,可能会遇到一些未实现的功能。
有几个小组使用了Irrlicht(3D引擎)并取得了不错的成绩。
SFML看起来很有前途,但我还没有试过。
正如其他人所说,GLUT并不适用于任何严肃的应用程序。其余提到的库更像是GUI工具包而不是游戏开发库。

1
根据最近与作者的通讯,OGLWFW 的开发已经停止。

好知道。它们似乎都在消失...现在你必须选择一个大型专业开发的框架。 - mpen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接