Проблема с созданием 2D-интерфейса в 3D-мире openGL

Я работаю над проектом, который требует, чтобы я создал 2D-интерфейс, визуализированный «сверху», или 3D-мир. На некоторых других форумах я читал, что вы можете использовать «GluOrtho2D ()» для этой работы и вернуться к GluPerspective (), как только закончите. Единственное, что мой тестовый код, который я написал для него, отображает только трехмерный мир, а не двухмерный четырехугольник. Однако, когда я отключаю код 3D-рендеринга, четырехугольник появляется там, где должен был быть. Я сократил код до операторов только для openGL, которые я написал ниже. Код написан на Python с использованием библиотеки Pyglet.


Код инициализации сцены:

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 () создает трехмерную сцену, а пара glBegin-glEnd рисует двухмерный четырехугольник:

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)

Я действительно надеюсь, что кто-нибудь могу указать на мою ошибку! И спасибо за помощь :)

5
задан Bartvbl 26 November 2010 в 23:06
поделиться