有哪些GLUT替代品?


12

我正在尝试学习OpenGL,但我发现GLUT已过时。我已经知道SDL,而且似乎是一个不错的选择。我应该使用SDL来用OpenGL开发游戏,还是有更好的选择。我是游戏开发的新手,所以我对最新技术了解不多。

Answers:


27

我刚刚发现GLUT已过时。

当您接受遇到的第一个答案时,就会发生这种情况。您得到错误的信息。GLUT 3.7不应该使用,但是FreeGLUT完全向后兼容。

但是,您的问题在其他地方。对于制作实际游戏,*形式的GLUT是不合适的。它不能让您控制主循环,您在游戏中确实需要它(FreeGLUT确实可以控制主循环,但这仍然很奇怪)。GLUT用于编写图形演示。在测试新的图形效果时,这一点非常重要,因此需要时,它应该在工具箱中。但是您的主要游戏代码永远不要使用它。

GLFW是GLUT的以游戏为中心的轻量级替代方案。它为创建OpenGL窗口以外的内容提供了基本支持。它使您可以获取输入,将图像作为纹理加载以及其他一些功能。

SDLSFMLAllegro 5都是多媒体工具包。他们可以创建的OpenGL窗口,但他们做了很多不止于此。它们为制作游戏所需的输入,音频和其他各种内容提供全面支持。如果您要开发游戏,那么这些都是不错的起点。我个人喜欢Allegro 5,但这只是我对好的文档和简洁的API的偏见。


1
AAA标题(仅限PC和多平台)使用什么?他们是否使用您提到的这些(GLFW,Allegro)来处理opengl窗口?还是他们从头开始编写自己的“一切”?
Quazi Irfan

@iamcreasy:“ AAA标题”(我真的很讨厌那个术语)不使用任何这些。通常,他们不使用任何开源软件。他们可以,但是如果要使用库,则宁愿使用受支持的库。有一些例外,例如ODL或Bullet。但是这些是例外,而不是规则。
Nicol Bolas'2

从什么时候开始GLFW会“将图像加载为纹理”?绝对不在功能列表中;在我的glfw标头中也无法远程实现此目的的任何功能。
deceleratedcaviar

1
GLUT的另一大缺点是其输入模型并不是特别适合游戏。无法获取原始键码或获取修改键本身的按下/释放事件(例如,使用ctrl作为触发按钮),也无法获取底层的GL上下文(这对于在X11上启用vsync是必需的,例如)。
蓬松的

1
@NicolBolas啊,我忘了2.7,对于GLFW 3.0版本,它们[线程,图像]已声明为“脱离上下文”。
deceleratedcaviar


2

如果您的目标是开发游戏,

这取决于您是否希望游戏跨平台。对于便携式(Windows,Mac,Linux)游戏,SDL似乎是唯一的选择。

如果只针对Windows和/或XBox,则还有更好的选择,例如XNA,使您无需手动编写大量代码。

如果您的目标是学习OpenGL,

只是在原始OpenGL中编程,但要准备面对许多不直观的概念,数学和大量手册。


正如Takumi所说,还有SFML作为可移植库。比SDL imho更好(它是最新的。)
kaoD 2012年

8
-1:“对于便携式(Windows,Mac,Linux)游戏,SDL似乎是唯一的选择。” 这甚至远非如此。SFML和Allegro 5都是完全有效的替代方案,并且都有更广泛的平台基础。
Nicol Bolas 2012年

1

GLUT是一个API以及一个库。原始库确实已过时。API是另一回事,开始时很好,它只需要进行修订即可克服限制并满足新的需求。当前主要的实现是FreeGLUT,它是受支持的并且不是过时的。这意味着GLUT(如FreeGLUT)是GLUT(如库GLUT)的一个很好的选择。

上面提到的“控制主回路”的问题是不正确的。使用更新的GLUT版本,您可以更好地控制游戏循环(如果这对您很重要)。该限制由glutMainLoopEvent()修复。此限制和其他限制在此处解决:

http://en.wikipedia.org/wiki/OpenGL_Utility_Toolkit


使用更新的GLUT版本,您可以更好地控制游戏循环(如果这对您很重要)。 ”这是一款游戏,所以是的,这对您很重要。而且,glutMainLoopEvent这不是管理主循环的好方法。它仍然使用事件驱动模型为您提供数据,而不是使用轮询模型在需要时从中获取所需数据。
Nicol Bolas

我必须指出,事件驱动模型比轮询更有效,除非您轮询从事件存储的数据(这很好)。轮询系统资源应谨慎进行。
Ingemar Ragnemalm

0

Qt确实支持OpenGL。看一下Open Inventor,并考虑是否可以直接使用更高级别的3D API。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.