PyOpenGL和OpenGL一样快吗?

时间:2014-10-10 23:28:32

标签: python c++ opengl

我正在尝试用Python和PyOpenGL构建一个通用的游戏引擎,但我不知道它是否值得尝试,因为我不确定Python是否能够胜任...

据我所知,PyOpenGL只是OpenGL的包装器。然而,我仍然看到人们说“OpenGL更好”,“Python太慢”。

例如,请查看this question。大多数答案都偏向于C ++。

如果他们都使用相同的技术,那么为什么一个会比另一个更好?对我而言,似乎语言并不重要,因为大部分工作都是由OpenGl /硬件完成的。我错过了什么?

2 个答案:

答案 0 :(得分:5)

第一个区别:OpenGL是一个规范,而不是一个库。因此,将PyOpenGL与OpenGL进行比较,就像将蓝图与房子进行比较一样。

回答你的问题:Python是一种解释性语言,就像Java一样。游戏引擎需要非常密集的计算,不仅用于图形,还用于物理,AI,动画,加载3D文件等.PyOpenGL可能足以用于良好的图形,但Python对于所有CPU端代码来说还不够。

当然,这也取决于"等级"您的游戏引擎:对于简单/学术游戏,Python可能会完美运行,但不要指望使用Cryengine。

答案 1 :(得分:2)

以这种方式思考:"你的应用程序和GPU驱动程序之间有多少抽象层。所以让我们看看。使用Python,你有Python解释器读取,解析和转换你的代码到中间(Python字节码)which then is loaded into Python virtual machine's runtime并且运行时解释该字节码并执行它。现在,如果你使用OpenGL库,那意味着之后Python应该通过一些抽象层调用GL方法,可能类似于Java {{3包装OpenGL API函数指针(通常是C ++共享库)。只有在此之后,才会将一个GL命令提交给您的OpenGL驱动程序。这也是它在Java,C#OpenGL包装器中的工作方式。

现在,如果您使用C ++,我将在此省略C ++作为基于虚拟机/解释器的本机语言(直接编译为机器字节码)的所有明显优势,您可以直接调用这些GL API方法(一旦它们通过扩展库(如GLEW.No接口或包装器)在启动时加载。因此,您不仅可以利用C ++性能,还可以利用所谓的“#34;接近金属"能够直接与图形API交互,而无需任何调解,这通常会导致繁重的应用程序产生明显的开销。

但是,正如其他人所说,它实际上取决于你的应用程序的性质。如果你在一些原型或科学模拟上工作,结果比性能更重要,那么Python就足够了。但是如果你的目标是从你的GPU中挤出你应该去的所有东西。

希望它有所帮助。