我一直在使用PyOpenGL和pygame,并成功创建了一个FPS风格的相机对象,现在我想在屏幕中间添加一个十字线,并有可能扩展到窗口的两侧显示统计数据。现在我想在屏幕中间添加一个十字线,并有可能在窗口的两侧扩展显示统计数据。
我已经研究过了,似乎你必须用OpenGL做一些奇怪的事情,比如禁用深度测试和改变投影矩阵,直到现在,这些都没有实际渲染任何东西,并降低了性能。
在我看来,这应该是非常容易的,因为我想要的是在其他所有东西上面的东西,而且永远不会移动。难道真的没有办法让 pygame 在 OpenGL 上绘制,这样我就可以在屏幕中间画两条线了吗?
没有指定的方法可以做到这一点。用OpenGL来做,并没有那么复杂。
根据你之前的问题,我假设你想在即时模式下使用以下方法来实现它 glBegin
- glEnd
序。在下文中,我假设 width
是窗口的宽度,而 height
其高度。你必须禁用深度测试,并通过以下方法备份当前的矩阵。glPushMatrix
glPopMatrix
. 加载 身份矩阵 的模型视图矩阵,并设置与窗口大小相对应的正交投影(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)
)