2011-07-07 64 views
0

一個問題,我有以下代碼:使用pyglet和pyopengl一起

import pyglet 
from OpenGL.GL import * 
from OpenGL.GLU import * 
class Window(pyglet.window.Window): 
     def __init__(self,width,height): 
      super(Window,self).__init__(width,height) 

      glClearDepth(1.0) 
      glDepthFunc(GL_LESS) 
      glEnable(GL_DEPTH_TEST) 
      glShadeModel(GL_SMOOTH) 
      glMatrixMode(GL_PROJECTION) 
      glLoadIdentity() 

     def on_draw(self): 
      glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) 
      glLoadIdentity() 
      #I know this is deprecated  
      glTranslatef(0.0,0.0,-5.0) 
      glColor3f(1.0,1.0,1.0) 
      glBegin(GL_TRIANGLES) 
      glVertex3f(0.0,0.0,0.0) 
      glVertex3f(0.0,1.0,0.0) 
      glVertex3f(1.0,0.0,0.0) 
      glEnd() 

     def on_resize(self,width,height): 
      glViewport(0,0,width,height) 
      glMatrixMode(GL_PROJECTION) 
      glLoadIdentity() 
      gluPerspective(45.0,float(width)/float(height),0.1,100.0) 
      glMatrixMode(GL_MODELVIEW) 

當我使用pyglet的OpenGL綁定它按預期工作。但是,當我使用pyopengl時,我只能看到混亂的混亂。

回答

2

每個工具包都認爲OpenGL窗口屬於他們自己。其中只有一個是正確的,因此只有其中一個才能正確渲染。

既然它們都暴露OpenGL,沒有理由嘗試在同一個程序中使用兩者。

1

我必須同意尼科爾。 每個人都認爲窗口屬於它,所以只有一個人能夠正確渲染,爲什麼不嘗試使用PyOpenGL創建窗口,哦,並獲得逃生的關鍵代碼:
escape = chr(27)
祝你好運!

+1

我會寫,這是在未來的答案:)一個可以給你負分這個如果一個人是邪惡的各種各樣的評論,不。 – Torxed

1

我可以確認PyOpenGL和Pyglet一起工作。 因爲python的opengl調用只是地址空間中相同的GL header/dll的封裝,所以它們都重定向到相同的函數。

我也可以確認你的代碼呈現。

我從源代碼使用Pyglet,請嘗試以下操作以直接從存儲庫頭安裝。

pip install hg+https://pyglet.googlecode.com/hg/ 

您將需要安裝mercurial。如果您使用的是virtualenv中,你可以簡單地使用:

pip install mercurial 
+0

這個例子在Linux中適用於我,也許在其他操作系統中有問題? –