有什么方法可以在OpenGL上显示pygame窗口?

问题描述 投票:1回答:1

我一直在使用PyOpenGL和pygame,并成功创建了一个FPS风格的相机对象,现在我想在屏幕中间添加一个十字线,并有可能扩展到窗口的两侧显示统计数据。现在我想在屏幕中间添加一个十字线,并有可能在窗口的两侧扩展显示统计数据。

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

在我看来,这应该是非常容易的,因为我想要的是在其他所有东西上面的东西,而且永远不会移动。难道真的没有办法让 pygame 在 OpenGL 上绘制,这样我就可以在屏幕中间画两条线了吗?

python opengl pygame pyopengl opengl-compat
1个回答
2
投票

没有指定的方法可以做到这一点。用OpenGL来做,并没有那么复杂。

根据你之前的问题,我假设你想在即时模式下使用以下方法来实现它 glBegin - glEnd 序。在下文中,我假设 width 是窗口的宽度,而 height 其高度。你必须禁用深度测试,并通过以下方法备份当前的矩阵。glPushMatrixglPopMatrix. 加载 身份矩阵 的模型视图矩阵,并设置与窗口大小相对应的正交投影(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))

© www.soinside.com 2019 - 2024. All rights reserved.