有没有办法在 OpenGL 上显示 pygame window?

Is there a way to display a pygame window over OpenGL?

我一直在使用 PyOpenGL 和 pygame,我设法创建了一个 FPS 风格的相机对象。现在我想在屏幕中间添加一个十字准线,并可能展开以在 window.

的两侧显示统计信息

我已经研究过了,看起来你必须用 OpenGL 做一些奇怪的事情,比如禁用深度测试和改变投影矩阵,直到现在 none 实际上渲染任何东西,并降低性能。

我觉得这应该很容易,因为我想要的只是超越一切的东西,而且永远不会移动。真的没有办法告诉 pygame 通过 OpenGL 绘制,所以我只能在屏幕中间画两条线吗?

不,没有指定的方法来做到这一点。在 OpenGL 中做它并不那么复杂。

根据您之前的问题,我假设您想使用 glBegin - glEnd 序列以立即模式执行此操作。
在下文中,我假设 width 是 window 的宽度,height 是它的高度。您必须禁用深度测试并通过 glPushMatrix/glPopMatrix. Load the Identity matrix for the model view matrix and setup an orthographic projection corresponding to the window size (glOrtho 备份当前矩阵):

cross_size = 100

glMatrixMode(GL_MODELVIEW)
glPushMatrix()
glLoadIdentity()

glMatrixMode(GL_PROJECTION)
glPushMatrix()
glLoadIdentity()
glOrtho(0, width, height, 0, -1, 1)

glDisable(GL_DEPTH_TEST)

glColor3ub(128, 128, 128) # color of the crosshair
glBegin(GL_LINES)
glVertex2f(width/2 - cross_size/2, height/2)
glVertex2f(width/2 + cross_size/2, height/2)
glVertex2f(width/2, height/2 - cross_size/2)
glVertex2f(width/2, height/2 + cross_size/2)
glEnd()

glEnable(GL_DEPTH_TEST)

glMatrixMode(GL_PROJECTION)
glPopMatrix()
glMatrixMode(GL_MODELVIEW)
glPopMatrix()

确保禁用二维纹理(glDisable(GL_TEXTURE_2D))