我正在做一个项目,该项目需要我创建一个“在顶部”或 3D 世界呈现的 2D 界面。在其他一些论坛上,我读到您可以使用“GluOrtho2D()”来完成这项工作,并在完成后切换回 GluPerspective()。唯一的问题是,我为它编写的测试代码只显示 3D 世界,而不是 2D 四边形。但是,当我禁用 3D 渲染代码时,四边形出现在它应该在的位置。我将代码精简为仅限 openGL 的语句,我在下面写下了这些语句。代码是使用 Pyglet 库用 Python 编写的。
场景初始化代码:
glViewport(0, 0, width, height)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(60.0, float(width)/height, .1, 10000.)
glMatrixMode(GL_MODELVIEW)
glClearDepth(1.0)
glShadeModel(GL_FLAT)
glEnable(GL_DEPTH_TEST)
glDepthFunc(GL_LEQUAL)
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
帧渲染代码。对 builder.buildMap() 的调用创建了 3D 场景,而 glBegin-glEnd 对绘制了一个 2D 四边形:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)
stage.set3DMode(window.width, window.height)
builder.buildMap()
stage.set2DMode(window.width, window.height)
glBegin (GL_QUADS)
glVertex2i(0, 0)
glVertex2i(0, 200)
glVertex2i(200, 200)
glVertex2i(200, 0)
glEnd()
stage.set3DMode 函数:
glDisable(GL_DEPTH_TEST)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluOrtho2D(0, width, 0, height)
glMatrixMode(GL_MODELVIEW)
和 stage.set3DMode 函数:
glEnable(GL_DEPTH_TEST)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(60.0, float(width)/float(height), .1, 10000.)
glMatrixMode(GL_MODELVIEW)
我真的希望有人能指出我的错误!谢谢你帮助我:)