在Python 2.6.6中使用pyopengl遇到问题
我想做的是编写一个基本的 OpenGL 2.0 窗口。当我从文件运行代码时,前几次运行是正常的,但之后就出现错误。如果我在 IDLE 图形界面中运行完全相同的代码,每次都能成功打开窗口。下面是我添加的 Python 2.6.6 包的列表,还有代码和错误信息。我是不是用了一些冲突的包?或者缺少了什么包?在 IDLE 图形界面中的导入都能正常工作。任何帮助都非常感谢!!
Date: Aug 1, 2011 Time: 03:20:00 AM This is the listing of packages installed for Python 2.6.6. This file was created manually and is meant to be used as a reference to show what packages were added in which order python-2.6.6.msi setuptools-0.6c11-win32-py26.exe numpy-1.6.0-win32-superpack-python26.exe PIL-1.1.7-win32-py26.exe wxPython2.8-win32-unicode-2.8.12.0-py26.exe wxPython2.8-win32-docs-demos-2.8.12.0.exe pyglet-1.1.4.msi pywin32-216-win32.py32.exe PyOpenGL-3.0.1.win32.exe PyOpenGL-accelerate-3.0.1-win32-py26.exe Pygame-1.9.1-win32-py26.msi py2exe-0.6.9-win32-py2.6.exe psyco (using c:\python26\scripts\easy_install psyco)
#import sys #redundant(used to eval errors)
#import OpenGL #redundant(used to eval errors)
#import numpy #redundant(used to eval errors)
#From here down is the original code, with gl imports listed as GLUT/GL/GLU
#Page 26 PyOpenGL.pdf by Stan Blank, Ph.D
from OpenGL.GL import * #These 3 imports are called in a layered format
from OpenGL.GLU import * #Fron the simplest to the most complex(complete)
from OpenGL.GLUT import *
def draw():
glClear(GL_COLOR_BUFFER_BIT)
glutWireTeapot(0.5)
glFlush()
glutInit(sys.argv)
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)
glutInitWindowSize(250, 250)
glutInitWindowPosition(100, 100)
glutCreateWindow("Python OGL Program")
glutDisplayFunc(draw)
glutMainLoop()
IDLE error listings Traceback (most recent call last): File "C:\Code\Python\PyOpenGL\ogl_01.py", line 7, in from OpenGL.GL import * File "C:\Python26\lib\site-packages\pyopengl-3.0.1-py2.6-win32.egg\OpenGL\GL\__init__.py", line 2, in from OpenGL.raw.GL import * File "C:\Python26\lib\site-packages\pyopengl-3.0.1-py2.6-win32.egg\OpenGL\raw\GL\__init__.py", line 6, in from OpenGL.raw.GL.constants import * File "C:\Python26\lib\site-packages\pyopengl-3.0.1-py2.6-win32.egg\OpenGL\raw\GL\constants.py", line 7, in from OpenGL import platform, arrays File "C:\Python26\lib\site-packages\pyopengl-3.0.1-py2.6-win32.egg\OpenGL\arrays\__init__.py", line 22, in formathandler.FormatHandler.loadAll() File "C:\Python26\lib\site-packages\pyopengl-3.0.1-py2.6-win32.egg\OpenGL\arrays\formathandler.py", line 37, in loadAll cls.loadPlugin( entrypoint ) File "C:\Python26\lib\site-packages\pyopengl-3.0.1-py2.6-win32.egg\OpenGL\arrays\formathandler.py", line 44, in loadPlugin plugin_class = entrypoint.load() File "C:\Python26\lib\site-packages\pyopengl-3.0.1-py2.6-win32.egg\OpenGL\plugins.py", line 14, in load return importByName( self.import_path ) File "C:\Python26\lib\site-packages\pyopengl-3.0.1-py2.6-win32.egg\OpenGL\plugins.py", line 28, in importByName module = __import__( ".".join(moduleName), {}, {}, moduleName) File "C:\Python26\lib\site-packages\pyopengl-3.0.1-py2.6-win32.egg\OpenGL\arrays\numpymodule.py", line 25, in from OpenGL_accelerate.numpy_formathandler import NumpyHandler File "numpy.pxd", line 30, in OpenGL_accelerate.numpy_formathandler (src\numpy_formathandler.c:3543) ValueError: numpy.dtype does not appear to be the correct type object
抱歉帖子有点长,我只是想详细记录这个问题。我的 Python 安装在 Windows XP SP3 上,IDLE 的头部信息如下:
Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)] on win32
2 个回答
0
这个关于OpenGL的numpy Cython扩展可能是用numpy 1.3.x版本构建的。所以你要么重新编译OpenGL(特别是Cython扩展),用你现在的numpy版本,要么把numpy降级到1.3.x版本。(如果这样还不行,可以尝试降级到1.4.x和1.5.x版本,因为我不太清楚每个版本具体改了什么)。
0
我试过这个方法,结果对我有效,
- 首先,我去了 http://pypi.python.org/pypi/PyOpenGL-accelerate 下载了一个压缩的源代码包。
- 然后,我用7zip解压这个包,放到了一个叫PyOpenGL-accelerate-3.0.1的文件夹里。
- 接着,我打开命令提示符,进入刚才创建的那个文件夹。
我输入了C:\python26\python setup.py install来执行安装这个包的命令。
安装完成后,我在IDLE、Dr.Python和PythonWin这三个开发环境中运行了一个简单的OpenGL脚本。结果这三个环境都能成功创建一个正确的OpenGL窗口(一个400x400的窗口,黑色背景,白色的茶壶线框),没有出现任何错误。通过这个方法,我还保留了Numpy 1.6。