PyOpengl 和 PyQt 性能

1 投票
1 回答
2646 浏览
提问于 2025-04-17 13:04

我写了一个Wavefront OBJ加载器,它能正常工作,但当多边形数量达到500个时,帧率就降到大约3帧每秒;1000个多边形时,延迟大约10秒;而2000个以上的多边形则会导致程序卡死和崩溃。

我的C++/Qt应用程序在加载100万个多边形时,帧率大约在15到20帧每秒之间。我怀疑是PyOpengl(ctypes)和PyQt(sip)这些封装导致的问题。

有没有人尝试过在PyOpengl和PyQt应用程序中加载高分辨率模型,能帮我解决这个问题吗?

编辑:我在OBJ加载器中使用了“顶点缓冲对象”,所以这和CPU没有关系。

1 个回答

4

关于Python和OpenGL的性能小贴士,来源于 http://pyopengl.sourceforge.net/ctypes/using.html

目前,Python是一种比较慢的编程语言,这主要是因为它的执行方式非常灵活。这意味着在用Python编写OpenGL代码时,有些在C或C++中表现良好的方法在Python中会变得非常慢。记住一个关键点:尽量把重复和迭代的工作交给OpenGL来处理,因为OpenGL是用C语言和硬件实现的。

为了实现这一点,主要有两种方法:

  • 使用基于数组的几何图形
  • 使用显示列表

解决方案:

我通过使用Ctypes解决了性能问题,只需在我的C++应用程序(现在主要是C)周围写一个小的包装器,并使用PyQt来处理图形界面和GL小部件。——我在处理大约100万个多边形时达到了每秒10帧的性能,效果非常好,强烈推荐!!

撰写回答