2

Pyglet の OpenGL ラッパーを使用してピッキングを実装しようとしていますが、C チュートリアルを Python に変換するのに問題があります。具体的には下の部分。

#定義BUFSIZE 512
Gluint selectBuf[BUFSIZE]

void startPicking(int カーソル X, int カーソル Y) {
    GLint ビューポート[4];

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

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

    glGetIntegerv(GL_VIEWPORT,ビューポート);
    gluPickMatrix(cursorX,viewport[3]-cursorY,
            5,5、ビューポート);
    gluPerspective(45,比率,0.1,1000);
    glMatrixMode(GL_MODELVIEW);
    glInitNames();
}

glSelectBuffer と glPickMatrix が機能するように、GLuint または GLint の宣言配列を有効にする方法がわかりません。PythonでPygletを使用してこれを行う方法を知っている人はいますか? ありがとう。

4

3 に答える 3

5

私はあなたの特定の例を試していませんが、配列を宣言する通常の方法はctypesのドキュメントにあります。基本的に、次のような配列型を作成します。

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

具体的にどのようなお悩みをお持ちですか?Pyglet の OpenGL 実装は DLL のシン ラッパーであり、C 呼び出しをほぼ 1 対 1 でマップします。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 に答える
1

私は PyOpenGL で頑張ってきました。

http://pyopengl.sourceforge.net/

これは非常に簡単で、C のチュートリアルを使用する方が簡単だと思います。

于 2009-08-17T22:57:32.177 に答える