PygletでOpenGLピッキング
質問
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)
他のヒント
正確にどのような問題を抱えていますか? 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()
所属していません StackOverflow