有没有办法在 OpenGL 上显示一个 pygame 窗口?
Posted
技术标签:
【中文标题】有没有办法在 OpenGL 上显示一个 pygame 窗口?【英文标题】:Is there a way to display a pygame window over OpenGL? 【发布时间】:2020-05-01 17:14:16 【问题描述】:我一直在使用 PyOpenGL 和 pygame,并设法创建了一个 FPS 风格的相机对象。现在我想在屏幕中间添加一个十字准线,并可能在窗口的两侧展开以显示统计信息。
我已经对此进行了研究,看来您必须对 OpenGL 做一些奇怪的事情,例如禁用深度测试和更改投影矩阵,直到现在这些都没有真正呈现任何东西,并降低了性能。
在我看来,这应该很容易,因为我想要的只是凌驾于其他一切之上,并且永远不会移动的东西。真的没有办法告诉 pygame 在 OpenGL 上绘图,所以我可以在屏幕中间画两条线吗?
【问题讨论】:
不,没有指定的方法可以做到这一点。在 OpenGL 中执行它并没有那么复杂。 【参考方案1】:不,没有指定的方法可以做到这一点。在 OpenGL 中执行它并不复杂。
根据您之前的问题,我假设您想使用glBegin
- glEnd
序列以立即模式执行此操作。
下面我假设width
是窗口的宽度,height
是它的高度。您必须禁用深度测试并通过glPushMatrix
/glPopMatrix
备份当前矩阵。为模型视图矩阵加载Identity matrix,并设置对应于窗口大小的正交投影(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)
)
【讨论】:
以上是关于有没有办法在 OpenGL 上显示一个 pygame 窗口?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在无头机器上使用使用硬件加速 OpenGL 的应用程序?
问题让 pygame 在 Macos 上显示除空白屏幕外的任何内容