我正在尝试在PyOpenGL中使用帧缓冲区对象,并找到了一些可以自学的教程。我正在使用Python 2.7.3的WinXP计算机上工作,并且刚刚安装了PyOpenGL 3.0.2和PyOpenGL-accelerate 3.0.2的二进制发行版。但是,从一开始我就遇到了一个问题,从某种意义上说,我得到的错误消息是fbo函数似乎不存在。这些是重新创建我的问题的步骤:
导入模块:
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GL.framebufferobjects import *
现在,我应该可以使用帧缓冲对象/功能了。
print glGenFramebuffers
print glBindFramebuffer
表演
<OpenGL.extensions.glGenFramebuffers object at 0x03172260>
<OpenGL.extensions.glBindFramebuffer object at 0x03172120>
但是,如果我尝试按照教程中的说明调用(创建实例)此对象,则:
fbo = glGenFramebuffers(1)
glBindFramebuffer(GL_FRAMEBUFFER, fbo )
我收到错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "latebind.pyx", line 31, in OpenGL_accelerate.latebind.LateBind.__call__ (src\latebind.c:645)
File "C:\Python27\lib\site-packages\OpenGL\extensions.py", line 189, in finalise
self.__name__,
OpenGL.error.NullFunctionError: Attempt to call an undefined alternate function (glGenFramebuffers, glGenFramebuffersEXT), check for bool(glGenFramebuffers) before calling
使用
bool(glGenFramebuffers)
确实返回False。
我究竟做错了什么?是否所有必需的帧缓冲库都不应与PyOpenGL(-accelerate)的二进制文件一起安装?
在此先感谢任何可以帮助我的人。
编辑:我只是发现https://stackoverflow.com/questions/12953134/problems-with-frame-buffer-objects-fbos-in-pyopengl,有类似的问题,但没有解决方案
最佳答案
显然,如果您从文件运行上述代码,则该代码不会显示此行为,并且不能很好地运行。我在控制台中尝试了上述命令,然后
bool(glGenFramebuffers)
返回False
从文件运行时,它返回True,一切正常。
此外,您似乎不需要包括
from OpenGL.GL.framebufferobjects import *
在较新版本的PyOpenGL(> = 3.0.2)中,因为没有它也可以访问Framebuffer对象
关于python - pyopengl帧缓冲区,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13396170/