使用Qt和OpenGL进行游戏开发

5

我对Qt有一些问题。

  1. 我已经知道Qt和OpenGL可以一起使用。目前在我们的大学里我们使用GLUT(用于窗口和输入管理)。我发现Qt也能做同样的事情。 使用Qt是否存在不如GLUT好的缺点? (性能方面)

  2. 我还知道Qt可以用来构建游戏内GUI。我甚至看到过这个3D GUI示例WolfenQt。所以可能是有可能的。 但如果您关心性能,使用Qt构建游戏内GUI是否合理?


3
甚至有64位Windows版本的glut吗?我认为它已经不再开发并且不是开源的。QT是一个很好的跨平台工具包,目前仍在开发中。真的没有比较的理由。学校仍然使用glut是因为它是教授3D编程的流行库,而不是因为它提供最佳性能。此外,大部分性能将来自于OpenGL而不是小部件库。 - Codeguy007
1
@Codeguy007:有FreeGLUT,它是开源的并且得到了良好的维护。是的,它也有Win64版本。但是我不建议在游戏中使用GLUT。最好使用SDL或GLFW。 - datenwolf
1个回答

5

Qt,像其他工具一样,可能被误用。但仅仅因为你使用了Qt并不意味着OpenGL性能会受到影响。OpenGL不关心上下文以及它所绑定的可绘制对象是如何创建的。Qt对性能的最大影响在于它管理和传递事件的方式;也就是信号/槽机制。


你为什么会选择GLFW而不是QT来开发游戏呢?因为QT使用事件和GLFW使用C回调函数。 - Maik Klein
1
@MaikKlein:GLFW不使用回调函数,就像SDL一样(我想你指的是GLUT,这是一个不同的框架)。它将整个事件循环放在您手中。这正是您想要的游戏!Qt传递信号,这些信号在主循环中收集到队列中,然后分派到它们连接到的插槽中。这使得延迟有点不可预测。在大多数情况下,您不会注意到,但有时候...关键是,使用GLFW和SDL,您可以精确控制事件管理、操作顺序和时间。而使用Qt则不行。 - datenwolf
@datenwolf:事件和信号/插槽通常是无关的。几乎所有的信号/插槽基本上都是对方法的调用,从不经过事件循环。只有在多线程设置中,事件循环才会被涉及。因此,你的陈述可以归结为“不要做太多的事情,否则你的延迟会受到影响”,这对于任何框架都是正确的。 - Tobias Hunger
1
@TobiasHunger:确实如此。然而,大多数游戏都是多线程的,这时事情就变得有趣了;与使用的框架无关。 - datenwolf
使用一个线程进行窗口管理,使用自定义循环在Render()之前调用ProcessEvents() [基本上是编写自己的游戏循环],可以直接控制Qt的线程 :) - Петър Петров

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