2009-08-17 54 views
2

我試圖用Pyglet的OpenGL包裝來實現拾取,但我在將C tutorial轉換爲Python時遇到了麻煩。具體是下面的部分。用Pyglet拾取OpenGL

#define BUFSIZE 512 
GLuint selectBuf[BUFSIZE] 

void startPicking(int cursorX, int cursorY) { 
    GLint viewport[4]; 

    glSelectBuffer(BUFSIZE,selectBuf); 
    glRenderMode(GL_SELECT); 

    glMatrixMode(GL_PROJECTION); 
    glPushMatrix(); 
    glLoadIdentity(); 

    glGetIntegerv(GL_VIEWPORT,viewport); 
    gluPickMatrix(cursorX,viewport[3]-cursorY, 
      5,5,viewport); 
    gluPerspective(45,ratio,0.1,1000); 
    glMatrixMode(GL_MODELVIEW); 
    glInitNames(); 
}

我不知道如何將聲明GLuint或GLint的數組,使glSelectBuffer和glPickMatrix工作。有沒有人知道如何用Pyglet在Python中執行此操作?謝謝。

回答

5

我沒試過你的具體的例子,但聲明數組的正常方式是在ctypes documentation。基本上你會創建一個像這樣的數組類型:

FourGLints = GLint * 4 
viewport = FourGLints(0, 1, 2, 3) 
+0

這正是我所需要的。感謝您指點我正確的方向。 – exupero 2009-09-08 22:09:38

+0

沒問題,歡迎來到本站:) – Kiv 2009-09-08 22:19:09

1

你究竟遇到了什麼樣的麻煩? Pyglet的OpenGL實現是DLL上的一個簡單封裝,幾乎可以將C調用映射爲一對一。很難想象會有任何其他庫在遵循C教程方面會更好。

例如,this introduction是幾乎到C相當於相同的,當涉及到OpenGL調用:

from pyglet.gl import * 

# Direct OpenGL commands to this window. 
window = pyglet.window.Window() 

@window.event 
def on_draw(): 
    glClear(GL_COLOR_BUFFER_BIT) 
    glLoadIdentity() 
    glBegin(GL_TRIANGLES) 
    glVertex2f(0, 0) 
    glVertex2f(window.width, 0) 
    glVertex2f(window.width, window.height) 
    glEnd() 

pyglet.app.run()