【问题标题】:OpenGL in Python with Snow Leopard?Python中的OpenGL和雪豹?
【发布时间】:2009-09-07 15:42:48
【问题描述】:

我有兴趣在 Python 中使用 OpenGL。我在 C++ 和 Objective-C 中使用过 OpenGL,但我在 Python 方面没有太多经验。我想知道是否有适用于雪豹的好教程。如果可能的话,我宁愿保持在 64 位模式,因为我听说 32 位程序需要加载很多额外的 32 位库。

我已经尝试过PyOpenGL/wxPython tutorial。当我运行代码时,它崩溃并显示以下消息:

ImportError: /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/wx-2.8-mac-unicode/wx/_core_.so: no appropriate 64-bit architecture (see "man python" for running in 32-bit mode)

看起来 wxPython 中有一个 bug 阻止它在 64 位系统上工作。

我也查看了 Pyglet,但他们有一个 similar issue。他们提供了一种解决方法(将 Python 设置为 32 位模式),但看起来他们不会修复它。

最后,我查看了 PyGLUT,但我认为它仅适用于 Windows。

是否有任何其他库可以让我访问 OpenGL 并在屏幕上绘图?同样,我更喜欢保持 64 位模式,但如果没有任何效果,我将切换到 32 位并再次尝试 wxPython 或 Pyglet。


编辑:我也试过 PyGame。它取决于 SDL,即 SL 中的 broken。想过通过PyObjc尝试使用Cocoa,但是Xcode Python应用模板have been removed.

【问题讨论】:

  • 这个问题已经在 Pyglet 的 Mercurial repo (pyglet.googlecode.com/hg) 中得到修复,消除了对 pyobjc 的依赖,人们正在努力“马上”发布 1.2 版本,尽管我一直在直接从 Mercurial 使用该库,没有任何不良影响。

标签: python opengl osx-snow-leopard


【解决方案1】:

我在 Snow Leopard 上使用 PyOpenGL 3.0.0 非常成功。它使用 ctypes,因此如果这些库可用(并且 Snow Leopard 的 Python 包含 64 位版本),它应该进行 64 位调用。我没有在 PyOpenGL 中使用 wxPython 的东西,所以这可能是你遇到问题的地方,但是 PyOpenGL 还包括 GLUT,它们都运行良好。

【讨论】:

  • 我不知道 PyOpenGL 包含 GLUT。我认为 PyGLUT 是唯一可用的 GLUT 接口。无论如何,我只使用 PyOpenGL 编写了一个快速程序,效果很好。
【解决方案2】:

可能没有充分的理由避免使用 32 位模式。当然,除非你的 Python 程序需要更大的地址空间。

【讨论】:

  • 32位程序不需要在SL中加载整个32位堆栈吗?这似乎会浪费很多资源。不过,您可能是对的;这不需要是高性能代码。
  • 您很可能有其他 32 位进程正在运行,因此开销会很小。
  • 有一个重要原因:便携性。你不能假设你的用户会设置全局系统变量和你有什么来让你的应用运行。
  • 无论如何,您都不能将 python 应用程序作为源分发给最终用户,因为您不能假设他们会安装正确版本的解释器。所以你必须捆绑一个解释器,因此只能捆绑一个 32 位的解释器。我认为这就像在运行“py2app”之前在您的 virtualenv 中的 python 二进制文件上运行“lipo”一样简单。 (但我从未真正做过)
【解决方案3】:

你可以试试 pygame. Pygame 是一个围绕 SDL 的 python 包装器。根据他们的网站,他们有 Max OS X 二进制文件。这是在 OpenGL 中使用 pygame 的simple example。一旦您能够创建窗口并处理事件,大多数 OpenGL 编程就像在 C 或 C++ 中一样,但添加了一些 Python 优点。对于 OpenGL,NeHe 是一个很棒的教程。

【讨论】:

  • 我实际上无法安装 PyGame。编译 _numericsurfarray.c 时,easy_install 会抛出一堆错误,因为缺少 SDL.h。 SDL 1.2 依赖于 QuickDraw (bugzilla.libsdl.org/show_bug.cgi?id=581),它不再在 Snow Leopard 中,因此它可能永远无法工作。
  • 我也试过二进制安装程序。它说它需要安装“System Python 2.6”,这很奇怪,因为 SL 带有 2.6.1。
  • 你可以尝试下载源代码,然后运行'python setup.py install'
【解决方案4】:

另外,在 Python 中使用 OpenGL 进行编程时,请记住 Python 数据结构在满足 3D 图形要求时可能会相当慢。例如,PyGL 开发人员建议将 ctypes 用于与图形相关的操作,因为这样可以通过可承受的 FPS 获得足够的性能来处理一些复杂的几何图形。

【讨论】:

  • 这需要谨慎的措辞。缓慢的部分与其说是 Python 数据结构本身(如顶点列表),不如说是调用将它们转换为 ctypes 数组,然后将它们分流到 GPU。如果你每帧都这样做,那么它会很慢。但正常的 OpenGL 良好实践建议提前一次将静态几何体(即具有刚性、不变形状,可能移动或旋转的几何体)发送到 GPU。这样的 Python 程序可以显示数百或数千位相当复杂的几何图形,以 60fps 的速度移动,即使在相当普通的硬件上也是如此。
猜你喜欢
  • 2012-01-10
  • 1970-01-01
  • 1970-01-01
  • 2011-03-12
  • 1970-01-01
  • 2010-11-02
  • 2012-09-04
  • 1970-01-01
相关资源
最近更新 更多