编程语言
首页 > 编程语言> > python – 在3D openGL世界中创建2D界面的问题

python – 在3D openGL世界中创建2D界面的问题

作者:互联网

我正在开发一个项目,要求我创建一个“在顶部”或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)

我真的希望有人可以指出我的错误!谢谢你帮助我:)

解决方法:

看起来你在切换到GL_MODELVIEW后没有调用glLoadIdentity().最简单的方法是每次更改投影矩阵时调用它,切换到GL_MODELVIEW并调用glLoadIdentity()(除非你真的想保留旧的).

标签:python,opengl,pyglet
来源: https://codeday.me/bug/20190518/1129216.html