2009-08-17 8 views
2

Ich versuche, Picking mit Pyglet OpenGL Wrapper zu implementieren, aber ich habe Probleme beim Konvertieren von C tutorial nach Python. Speziell der Teil darunter.OpenGL Kommissionierung mit Pyglet

#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(); 
}

Ich bin nicht sicher, wie Arrays von GLuint erklären drehen oder GLint so dass glSelectBuffer und glPickMatrix Arbeit. Weiß jemand, wie man das in Python mit Pyglet macht? Vielen Dank.

Antwort

5

Ich habe Ihr spezielles Beispiel nicht ausprobiert, aber die normale Art und Weise Arrays in denen zu erklären ist ctypes documentation. Im Wesentlichen würden Sie einen Array-Typ wie folgt erstellen:

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

Das ist genau das, was ich brauchte. Danke, dass Sie mich in die richtige Richtung weisen. – exupero

+0

Kein Problem, willkommen auf der Website :) – Kiv

1

Welche Art von Ärger haben Sie? Die OpenGL-Implementierung von Pyglet ist ein dünner Wrapper über die DLL und bildet ziemlich genau die C-Aufrufe eins zu eins ab. Es ist schwer vorstellbar, dass es eine andere Bibliothek geben würde, die in Bezug auf das Folgen eines C-Tutorials besser sein könnte.

Zum Beispiel ist this introduction ziemlich identisch mit dem C äquivalent, wenn es darum geht, die OpenGL-Anrufe:

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()