【问题标题】:PyOpengl and PyQt performancePyOpengl 和 PyQt 性能
【发布时间】:2012-03-06 14:26:24
【问题描述】:

我编写了一个 Wavefront OBJ 加载器,它可以工作,但是在 500 个多边形、1000 个多边形等于约 10 秒延迟和 2000+ 个多边形等于冻结和崩溃之后,FPS 下降到 ~3。

我的 C++/Qt 应用程序加载大约 15-20 FPS 的 100 万个多边形,我怀疑 PyOpengl(ctypes) 和 PyQt(sip) 包装器。

有没有人尝试将高分辨率模型加载到 PyOpengl 和 PyQt 应用程序中来帮助我?

编辑:我为 OBJ 加载器使用了“顶点缓冲区对象”,所以与 CPU 无关。

【问题讨论】:

    标签: python pyqt pyopengl wavefront


    【解决方案1】:

    Python + OpenGL 的性能提示,来自http://pyopengl.sourceforge.net/ctypes/using.html

    Python(目前)是一种相当慢的语言,因为它的执行模型具有令人难以置信的通用性。这意味着某些在 C 或 C++ 这样的语言中运行良好的 OpenGL 编码方法在 Python 中会非常缓慢。要记住的关键思想是,您希望尽可能将迭代和重复的工作推入 OpenGL 实现(用 C 和/或硬件实现)。

    有两种主要的方法来实现这一点:

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

    已解决:

    我通过使用 Ctypes 解决了性能问题,只需围绕我的 C++ 应用程序(现在主要是 C)编写一个小包装器,并将 PyQt 用于 GUI 和 GL 小部件。 -- 我获得了 10 FPS 的约 100 万个多边形、性能摇滚和强烈推荐!!

    【讨论】:

    • 显示列表曾经是答案,但是现代消费级 gfx 卡并不能很好地做到这一点。数组要好得多。
    • @qarma -- 我的应用程序是 Voxel Sculpting 并且需要大量的多边形,我尝试使用 Python 来缩短开发时间,但我对性能不满意,所以最好坚持使用好的旧 C++ 来处理这个特定问题任务。
    猜你喜欢
    • 2013-12-01
    • 2013-06-18
    • 2013-09-14
    • 2021-12-27
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    相关资源
    最近更新 更多