我正在尝试在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/

10-09 08:44