我在一个项目,需要我创建一个二维界面渲染“在顶部”或三维世界。在其他一些论坛上,我读到你可以使用“gluOrthor2D()”来完成这项工作,并在完成后切换回GluPerspective()。唯一的问题是,我为它编写的测试代码只显示三维世界,而不是二维四元世界。但是,当我禁用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对绘制二维四边形:
^{pr2}$在阶段设置3模式功能:
glDisable(GL_DEPTH_TEST)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluOrtho2D(0, width, 0, height)
glMatrixMode(GL_MODELVIEW)
以及阶段设置3模式功能:
glEnable(GL_DEPTH_TEST)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(60.0, float(width)/float(height), .1, 10000.)
glMatrixMode(GL_MODELVIEW)
我真的希望有人能指出我的错误!感谢您的帮助:)
我使用以下矩阵进行二维渲染:
很多人都搞错了如何使用glViewport等。他们总是把它放在整形回调中,这是完全错误的。在
在需要这些设置之前,您总是先在渲染功能中设置完整的设置。所以您的代码应该是(pesudocode):
这一点非常重要:OpenGL是一种状态机。除非你能证明所有的状态都发生了改变。在
在切换到GL\umodelview之后,似乎没有调用
glLoadIdentity()
。最简单的记住方法是每次更改投影矩阵时都调用它,切换到GL\umodelview并调用glLoadIdentity()
(除非您真的想保留旧的)。在相关问题 更多 >
编程相关推荐