[英]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)
你到底有什么麻煩? 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.