Выбор OpenGL с помощью Pyglet

Я пытаюсь реализовать выборку с помощью оболочки Pyglet OpenGL, но у меня возникают проблемы с преобразованием учебника C в Python. В частности, часть ниже.

#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. Кто-нибудь знает, как это сделать в Python с Pyglet? Спасибо.


person exupero    schedule 17.08.2009    source источник


Ответы (3)


Я не пробовал ваш конкретный пример, но обычный способ объявления массивов находится в документации ctypes. По сути, вы должны создать такой тип массива:

FourGLints = GLint * 4
viewport = FourGLints(0, 1, 2, 3)
person Kiv    schedule 08.09.2009
comment
Это именно то, что мне было нужно. Спасибо, что указали мне правильное направление. - person exupero; 09.09.2009

Мне повезло с PyOpenGL.

http://pyopengl.sourceforge.net/

Это довольно просто, и я считаю, что с ним будет проще использовать учебник по C.

person Isaac    schedule 17.08.2009

Какие именно проблемы у вас возникают? Реализация OpenGL в Pyglet представляет собой тонкую оболочку над DLL и в значительной степени сопоставляет вызовы C один к одному. Трудно представить себе какую-либо другую библиотеку, которая могла бы быть лучше с точки зрения следования руководству по C.

Например, это введение почти идентично эквиваленту 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()
person Kylotan    schedule 01.09.2009