2

我正在尝试使用 Pyglet 的 OpenGL 包装器实现拾取,但在将C 教程转换为 Python 时遇到了麻烦。具体如下部分。

#define BUFSIZE 512
GLuint selectBuf[BUFSIZE]

无效 startPicking(int cursorX,int cursorY){
    GLint视口[4];

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

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

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

我不确定如何打开声明 GLuint 或 GLint 的数组,以便 glSelectBuffer 和 glPickMatrix 工作。有谁知道如何在 Python 中使用 Pyglet 做到这一点?谢谢。

4

3 回答 3

5

我没有尝试过您的特定示例,但是声明数组的正常方法是在ctypes 文档中。本质上,您将创建一个像这样的数组类型:

FourGLints = GLint * 4
viewport = FourGLints(0, 1, 2, 3)
于 2009-09-08T20:51:33.380 回答
1

我在 PyOpenGL 上运气不错。

http://pyopengl.sourceforge.net/

这很简单,我相信使用 C 教程会更容易。

于 2009-08-17T22:57:32.177 回答
1

你到底遇到了什么麻烦?Pyglet 的 OpenGL 实现是对 DLL 的薄包装,并且几乎一对一地映射 C 调用。很难想象在遵循 C 教程方面会有任何其他库更好。

例如,当涉及到 OpenGL 调用时,此介绍与 C 等效项几乎相同:

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()
于 2009-09-01T15:34:28.873 回答