【问题标题】:OpenGL Windowing Library for 2009 [closed]2009 年的 OpenGL 窗口化库 [关闭]
【发布时间】:2009-08-10 00:30:53
【问题描述】:

试图决定一个库来为我的 OpenGL 应用程序创建一个窗口并捕获用户输入,但是选择太多了:

GLUT 已经过时了。我喜欢 GLFW,但似乎您无法在显示它之前设置窗口位置(我希望它居中,有这么多要问的吗?)所以你看到它出现然后移动,这让我很困扰。另外,开发似乎也停止了。 SFML 有一些不错的特性,但它使用事件轮询而不是我更喜欢的用于解耦的回调。我认为我不需要 FLTK 的所有 GUI 功能。 SDL 很慢(似乎没有利用 GPU)。而另外 3 个我不太了解(FreeGLUT、OpenGLUT、OGLWFW)。那么哪一个是邪恶的较小的呢?还有其他我没听说过的吗?

我只是想制作一个简单的 2D 游戏。我对 OpenGL 已经足够熟悉了,所以我并不需要绘制例程,但我可能不会抱怨其他如果实现得当的话可能有用的函数。

【问题讨论】:

  • OGLWFW 目前似乎只支持 Win32。该网站称 Linux/Mac 支持是“计划中的”。您还没有说许可或跨平台支持是否是一个问题 - 如果是,您可能需要记下这一点。
  • 哦。我一定忽略了这一点。跨平台很好……特别是因为我现在正在 Ubuntu 上开发。许可只是一个小问题,因为我似乎从来没有完成任何事情......我从来没有达到我有能力出售它的地步。

标签: c++ opengl


【解决方案1】:

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-esque(需要清理)并且使用事件轮询而不是回调,并且似乎与 OpenGL 没有很好的集成(需要使用 SDL 包装函数?)。
  • 一旦你在 pygame 或 SDL 中设置了 OpenGL 上下文,你就可以使用任何你想要的 OpenGL。我有一个 OpenGL 应用程序,它基本上使用 SDL 进行窗口化和事件轮询,使用 OpenGL 进行图形。
  • 嗯,是的......我并不是说它不起作用,只是需要更多的说服力才能击败其他库。
  • 混乱似乎相当混乱。你知道任何乱七八糟的开源程序吗?
  • @the_drow:我认为目前 Clutter 最知名的开源用户是英特尔 Moblin 上网本操作系统:moblin.org。
【解决方案2】:

不应在任何类型的生产应用程序中使用 GLUT 和其他 GLUT 替代方案。它们非常适合组装一个快速演示应用程序或尝试一些东西,但仅此而已。

如果您正在尝试制作 OpenGL 游戏,我建议您使用 SDL。它更多地关注游戏需求。它绝对可以与 OpenGL 一起使用。 “SDL OpenGL”的简短谷歌出现了this link,了解如何使用 SDL 初始化 OpenGL。启用 OpenGL 还应该启用 GPU 的硬件渲染。

Qt 是一个合理的替代方案,但如果您想将 OpenGL 嵌入到更大的桌面应用程序(想想 3D 建模、CAD/CAM、医学可视化等)中,您需要访问 UI 的标准 OS 小部件,那么它会更好。

【讨论】:

  • 是的...但 Qt 似乎也更加现代和精心设计!我的游戏将有一个编辑器...我可以使用这些额外的小部件:p 不过我会考虑在未来的项目中使用 SDL。
【解决方案3】:

我会选择 Qt。不错的通用库 + opengl 支持

【讨论】:

  • 对...忘记了 Qt。陡峭的学习曲线,不是吗?以前用过一次,完全迷惑了我。
  • Hrm...至少它附带的编辑器是(令人困惑的)。 NetBeans 6.8 似乎对 Qt 有一定程度的支持,因此启动并运行一个简单的应用程序并不是那么糟糕。
  • 我在 Windows 上使用 Qt 和 Visual Studio,在 *nix 机器上使用 Vim/make。它有非常好的文档和干净的 API。我认为有一些教程可以将它与 Eclipse/NetBeans/etc 等 IDE 一起使用。只需谷歌即可
  • 现在有一些简单的东西开始运行了......开始真的很喜欢它:) 它不仅有 perty 回调......它们已经神奇地为我注册了。似乎迫使您将代码分开,这可能是一件好事,否则我可能已经一团糟了:D
【解决方案4】:
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。我可以让“旋转立方体”工作得更快。

【讨论】:

  • 嗯,我个人已经知道 C++ 和 OpenGL,所以这不是一个真正的问题。我只需要一个跨平台的窗口 API。所有其他的花絮都对 Qt 很有帮助;)
【解决方案5】:

在我们的 C++ 课程中,我们在 2008 年使用 ClanLib 0.8 和在 2009 年使用 ClanLib 2.1 获得了相当不错的体验。自从从 SDL 转换后,学生的生产力(以他们的项目工作质量衡量)大大提高。不过需要注意的是,2.1 还很不完善,肯定会遇到一些根本没有实现的功能。

几个小组使用了 Irrlicht(3D 引擎)并取得了不错的效果。

SFML 看起来很有希望,但我还没有机会尝试。

正如其他人所说,GLUT 并不适合任何严肃的事情。提到的其余库更多的是 GUI 工具包,而不是游戏开发库。

【讨论】:

    【解决方案6】:

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

    【讨论】:

    • 很高兴知道。它们似乎都在消亡……你猜这些天你必须去寻找一个专业开发的大型框架。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 2013-10-09
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多