質問

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();
}

glselectbufferとglpickmatrixが機能するように、gluintまたはglintの宣言アレイを回す方法がわかりません。 PygletでPythonでこれを行う方法を知っている人はいますか?ありがとう。

役に立ちましたか?

解決

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

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

他のヒント

Pyopenglで幸運を祈りました。

http://pyopengl.sourceforge.net/

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

正確にどのような問題を抱えていますか? 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()
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top