簡體   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