2012-11-15 112 views
2

我想與PyOpenGL中的framebuffer對象一起工作,並已發現一些教程來教我自己。我正在使用Python 2.7.3開發一個WinXP機器,我剛安裝了PyOpenGL 3.0.2和PyOpenGL-accelerated 3.0.2的二進制發行版。然而,直接在一開始,我遇到了一個問題,從某種意義上說,我得到的錯誤信息是fbo函數似乎不存在。這是重建我的問題的步驟:pyopengl framebuffer

導入模塊:

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,類似的問題,但沒有解決

+1

你能鏈接教程? – Aesthete

+1

http://pyopengl.sourceforge.net/context/tutorials/shadow_2.xhtml 或 http://www.opengl.org/wiki/Framebuffer_Object_Examples#Quick_example.2C_render_to_texture_.282D.29 或 HTTP ://bazaar.launchpad.net/~mcfletch/openglcontext/trunk/view/head:/tests/shadow_2.py –

回答

1

很顯然,如果你從一個文件中運行它上面的代碼並不顯示此行爲,並運行良好。我試着在控制檯假

上面的命令,然後

bool(glGenFramebuffers) 

返回時從文件中運行它返回true,一切正常功能。 此外,你似乎並不需要包括

from OpenGL.GL.framebufferobjects import * 
在PyOpenGL的新版本

(> = 3.0.2),你還可以使用幀緩衝區對象沒有它

+0

原因可能是您必須創建一個OpenGL上下文(即打開OpenGL窗口並啓動glut主循環),然後才能對FrameBuffer對象執行任何操作。我幾次被抓到了。 – Nathaniel