繁体   English   中英

使用Pyglet进行OpenGL拾取

[英]OpenGL Picking with 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做到这一点? 谢谢。

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

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

我对PyOpenGL感到很幸运。

http://pyopengl.sourceforge.net/

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

你到底有什么麻烦? 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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM