pyopengl 帧缓冲区

Posted

技术标签:

【中文标题】pyopengl 帧缓冲区【英文标题】:pyopengl framebuffer 【发布时间】:2012-11-15 11:01:28 【问题描述】:

我正在尝试在 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://***.com/questions/12953134/problems-with-frame-buffer-objects-fbos-in-pyopengl,有类似的问题,但没有解决方案

【问题讨论】:

pyopengl.sourceforge.net/context/tutorials/shadow_2.xhtml 或 opengl.org/wiki/… 或 bazaar.launchpad.net/~mcfletch/openglcontext/trunk/view/head:/… 【参考方案1】:

显然,如果您从文件中运行,上面的代码并不能很好地显示这种行为和功能。我在控制台中尝试了上述命令,然后

bool(glGenFramebuffers)

返回假

从文件运行时,它返回 True 并且一切正常。 此外,您似乎不需要包含

from OpenGL.GL.framebufferobjects import *

在较新版本的 PyOpenGL (>= 3.0.2) 中,您也可以在没有它的情况下访问 Framebuffer 对象

【讨论】:

其原因可能是您必须先创建一个 OpenGL 上下文(即打开 OpenGL 窗口并启动 glut 主循环),然后才能对 FrameBuffer 对象进行任何操作。我已经被这个抓了好几次了。

以上是关于pyopengl 帧缓冲区的主要内容,如果未能解决你的问题,请参考以下文章

Android OpenGLES3绘图 - 帧缓冲

OpenGL 帧缓冲区 - 渲染到纹理创建带有主帧缓冲区内容的纹理

什么是深度帧缓冲区?

JOGL 和帧缓冲区渲染到纹理的问题:无效帧缓冲区操作错误

帧缓冲区和交换链到底是啥?

快速交换帧缓冲区 OpenGL